Numpy是python开源的科学计算工具包,它含有以下功能:
强大的N维数组对象:ndarray对数组结构进行运算(不用遍历循环)随机数、线性代数、傅里叶变换等功能numpy数组是一个多维数组对象,称为ndarray,其由两部分构成:
实际的数据描述这些数据的元数据eg:
import numpy as np lst =[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]] ar = np.array(lst) print(lst) print(ar, type(ar)) # ar是n维数组类型 print(ar.ndim) # ndim返回numpy的轴数 print(ar.shape) # shape返回numpy的纬度,轴数与列数,且是一个元组,(3,4) print(ar.size) # 返回元素个数 print(ar.dtype) # ndarray中元素的类型 print(ar.itemsize) # ndarray中一个元素所占的字节数 print(ar.data) # ndarray对象ar的物理地址 # 结果: [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]] [[1 2 3 4] [2 3 4 5] [3 4 5 6]] <class 'numpy.ndarray'> 2 (3, 4) 12 int32 4 <memory at 0x000001FFFB43CA68>eg:
# 创建数组,array()函数的括号中可以是列表,元组,数组,生成器等 ar1 = np.array(range(10)) # range是一个生成器 ar2 = np.arange(10) # 等价于上一行代码, arange和range的用法一模一样,只是这是调用的np的方法 print(ar1) print(ar2) # 如果元素类型不同,会自动将类型转为大的 ar3 = np.array([[1, 2, 3, 4], ['a', 'b', 'c', 'd']]) print(ar3) # 如果每个轴中的元素不等,则无论之前输入的是多少维,都会自动的变为一维数组 ar4 = np.array([[1, 2, 3, 4, 5], ['a', 'b', 'c', 'd']]) print(ar4, ar4.ndim) # 结果: [0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9] [['1' '2' '3' '4'] ['a' 'b' 'c' 'd']] [list([1, 2, 3, 4, 5]) list(['a', 'b', 'c', 'd'])] 1eg:T
ar = np.array([list(range(5)), list(range(5,10))]) print(ar.T) # 注意:这里是ar.T 不是ar.T() #结果: [[0 5] [1 6] [2 7] [3 8] [4 9]]eg:reshape()
ar = np.array([list(range(5)), list(range(5,10))]) print(np.reshape(ar, (5, 2))) # 用np下的reshape()函数 print(ar.reshape(5, 2)) # 用ndarray下的reshape()方法 #结果: [[0 1] [2 3] [4 5] [6 7] [8 9]] [[0 1] [2 3] [4 5] [6 7] [8 9]] [[0 1 2 3 4] [5 6 7 8 9]]eg:resize()
print(np.resize(ar, (5, 2))) # 用np下的resize()函数 print(ar.resize(5, 2)) # 用array下的resize()方法,发现是不行的,只能用np下的方法 #结果: [[0 1] [2 3] [4 5] [6 7] [8 9]] None注意:reshape()与resize()的不同之处在于,对于reshape()之前与之后的元素个数必须相同,而resize()不足的随机补充,过长就截断 eg:
import numpy as np ar = np.arange(4) b = np.resize(ar, (3, 4)) print(b) # 结果: [[0 1 2 3] [0 1 2 3] [0 1 2 3]]eg:
import numpy as np ar = np.array([list(range(5)), list(range(5,10))]) ar2 = ar.copy() # 属于深复制 print(ar2) #结果: [[0 1 2 3 4] [5 6 7 8 9]]注意:numpy中的数据类型转换,不能直接改原数据的dtype!只能用函数astype()。 eg:dtype与astype()
ar = np.arange(3) print(ar, ar.shape) b = ar.astype('float32') print(b, b.shape) ar.dtype = 'float32' print(ar, ar.shape) # 结果: [0 1 2] (3,) [0. 1. 2.] (3,) [0.e+00 1.e-45 3.e-45] (3,)结论:resize()只能用np.resize()
注意:hstack()是横向堆叠, vstack是竖直堆叠 eg:
ar = np.array([[1], [2], [3]]) # 3*1 ar2 = np.array([['a'], ['b'], ['c']]) # 3*1 print(np.hstack((ar, ar2))) # 横向连接 3*2 print(np.vstack((ar, ar2))) # 竖向叠加 6*1 # 结果: [['1' 'a'] ['2' 'b'] ['3' 'c']] [['1'] ['2'] ['3'] ['a'] ['b'] ['c']]注意:hsplit()是横向拆分, vsplit()是竖直拆分 eg:
ar = np.arange(16).reshape(4, 4) print(ar) print(np.hsplit(ar, 2)[0]) # 数值2代表的是要分成几列,0是代表取第1列数据 # 结果: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[ 0 1] [ 4 5] [ 8 9] [12 13]]eg:
ar = np.arange(8).reshape(2, 4) print(ar + 10) # 加法 print(ar - 1) # 减法 print(ar * 10) # 乘法 print(ar / 2) # 除法 print(ar.mean()) # 求平均数 print(ar.max()) # 求最大值 print(ar.min()) # 求最小值 print(ar.std()) # 求标准差 print(ar.var()) # 求方差 print(np.sort(ar)) # 排序 print(ar.sum()) # 求和 print(np.sum(ar, axis=1)) # 求方和,axis=1是按照行求和,axis=0是按照列求和数据分析—科学计算工具numpy(下)