呆板学习2-NumPy

[复制链接]
发表于 2025-11-18 00:52:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
ndarray主动广播扩展维度,便于举行行列式,数组盘算
  1. # 自动广播机制,1维数组和2维数组相加
  2. # 二维数组维度 2x5
  3. # array([[ 1,  2,  3,  4,  5],
  4. #         [ 6,  7,  8,  9, 10]])
  5. d = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
  6. # c是一维数组,维度5
  7. # array([ 4,  6,  8, 10, 12])
  8. c = np.array([ 4,  6,  8, 10, 12])
  9. e = d + c
  10. e
  11. # 输出
  12. array([[ 5, 8, 11, 14, 17], [10, 13, 16, 19, 22]])
复制代码
创建ndarray
  1. # 导入numpy
  2. import numpy as np
  3. # 1、从list创建array
  4. a = [1,2,3,4,5,6]  # 创建简单的列表
  5. b = np.array(a)    # 将列表转换为数组
  6. b
  7. # 输出
  8. array([1, 2, 3, 4, 5, 6])
  9. # 2、arange:创建元素从0到10依次递增2的数组
  10. # 通过np.arange创建
  11. # 通过指定start, stop (不包括stop),interval来产生一个1维的ndarray
  12. a = np.arange(0, 10, 2)
  13. a
  14. # 输出
  15. array([0, 2, 4, 6, 8])
  16. # 3、zeros:创建指定长度或者形状的全0数组
  17. a = np.zeros([3,3])
  18. a
  19. # 输出
  20. array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
  21. # 4、ones:创建指定长度或者形状的全1数组
  22. a = np.ones([3,3])
  23. a
  24. # 输出
  25. array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])
复制代码
ndarray的属性包罗shape、dtype、size和ndim等,通过如下代码可以查察ndarray数组的属性。

  • shape:数组的形状 ndarray.shape,1维数组(N,)(N,),2维数组(M,N)(M,N),3维数组(M,N,K)3维数组(M,N,K)。
  • dtype:数组的数据范例。
  • size:数组中包罗的元素个数ndarray.size,其巨细即是各个维度的长度的乘积。
  • ndim:数组的维度巨细ndarray.ndim, 其巨细即是ndarray.shape所包罗元素的个数。
  1. a = np.ones([3, 3])
  2. print('a, dtype: {}, shape: {}, size: {}, ndim: {}'.format(a.dtype, a.shape, a.size, a.ndim))
  3. a, dtype: float64, shape: (3, 3), size: 9, ndim: 2
复制代码
创建ndarray之后,可以对其数据范例或形状举行修改,代码实现如下:
  1. # 转化数据类型
  2. b = a.astype(np.int64)
  3. print('b, dtype: {}, shape: {}'.format(b.dtype, b.shape))
  4. # 改变形状
  5. c = a.reshape([1, 9])
  6. print('c, dtype: {}, shape: {}'.format(c.dtype, c.shape))
复制代码
数组间运算
  1. # 数组 减去 数组, 用对应位置的元素相减
  2. arr1 = np.array([[1., 2., 3.], [4., 5., 6.]])
  3. arr2 = np.array([[11., 12., 13.], [21., 22., 23.]])
  4. # 数组 乘以 数组,用对应位置的元素相乘
  5. arr1 * arr2
  6. array([[ 11., 24., 39.], [ 84., 110., 138.]])
  7. # 数组开根号,将每个位置的元素都开根号
  8. arr ** 0.5
  9. array([[1. , 1.41421356, 1.73205081], [2. , 2.23606798, 2.44948974]])
复制代码
切片上的操纵都会改变原数组,除非用np.copy创建新的内存空间
  1. # 数组切片产生的新数组,还是指向原来的内存区域,数据不会被复制。
  2. # 视图上的任何修改都会直接反映到源数组上。
  3. a = np.arange(30)
  4. arr_slice = a[4:7]
  5. arr_slice[0] = 100
  6. a, arr_slice
  7. (array([ 0, 1, 2, 3, 100, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]), array([100, 5, 6]))
  8. # 通过copy给新数组创建不同的内存空间
  9. a = np.arange(30)
  10. arr_slice = a[4:7]
  11. arr_slice = np.copy(arr_slice)
  12. arr_slice[0] = 100
  13. a, arr_slice
  14. (array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]), array([100, 5, 6]))
复制代码

  • mean:盘算算术均匀数,零长度数组的mean为NaN。
  • std和var:盘算标准差和方差,自由度可调(默以为n)。
  • sum :对数组中全部或某轴向的元素求和,零长度数组的sum为0。
  • max和min:盘算最大值和最小值。
  • argmin和argmax:分别为最大和最小元素的索引。
  • cumsum:盘算全部元素的累加。
  • cumprod:盘算全部元素的累积。
随机数np.random
  1. # 可以多次运行,观察程序输出结果是否一致
  2. # 如果不设置随机数种子,观察多次运行输出结果是否一致
  3. np.random.seed(10)
  4. a = np.random.rand(3, 3)
  5. # 设置了随机数种子,每次输出都一样
  6. # 生成均匀分布随机数,随机数取值范围在[0, 1)之间
  7. a = np.random.rand(3, 3)
  8. a
  9. array([[0.08833981, 0.68535982, 0.95339335], [0.00394827, 0.51219226, 0.81262096], [0.61252607, 0.72175532, 0.29187607]])
  10. # 生成均匀分布随机数,指定随机数取值范围和数组形状
  11. a = np.random.uniform(low = -1.0, high = 1.0, size=(2,2))
  12. a
  13. array([[ 0.83554825, 0.42915157], [ 0.08508874, -0.7156599 ]])
  14. # 生成标准正态分布随机数
  15. a = np.random.randn(3, 3)
  16. a
  17. array([[ 1.484537 , -1.07980489, -1.97772828], [-1.7433723 , 0.26607016, 2.38496733], [ 1.12369125, 1.67262221, 0.09914922]])
  18. # 生成正态分布随机数,指定均值loc和方差scale
  19. a = np.random.normal(loc = 1.0, scale = 1.0, size = (3,3))
  20. a
  21. array([[2.39799638, 0.72875201, 1.61320418], [0.73268281, 0.45069099, 1.1327083 ], [0.52385799, 2.30847308, 1.19501328]])
  22. # 打乱数组顺序(只打乱第一维)
  23. # 生成一维数组
  24. a = np.arange(0, 30)
  25. # 打乱一维数组顺序
  26. np.random.shuffle(a)
  27. # 随机选取部分元素
  28. a = np.arange(30)
  29. b = np.random.choice(a, size=5)
复制代码
线性代数

  • diag:以一维数组的情势返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)。
  • dot:矩阵乘法。
  • trace:盘算对角线元素的和。
  • det:盘算矩阵行列式。
  • eig:盘算方阵的特性值和特性向量。
  • inv:盘算方阵的逆。
文件读写
  1. # 使用np.fromfile从文本文件'housing.data'读入数据
  2. # 这里要设置参数sep = ' ',表示使用空白字符来分隔数据
  3. # 空格或者回车都属于空白字符,读入的数据被转化成1维数组
  4. d = np.fromfile('./work/housing.data', sep = ' ')
  5. # save & load
  6. # 产生随机数组a
  7. a = np.random.rand(3,3)
  8. np.save('a.npy', a)
  9. # 从磁盘文件'a.npy'读入数组
  10. b = np.load('a.npy')
复制代码
np.exp(x) --盘算x的指数值

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表