导入numpy库:
import numpy as np
python的一个科学计算库的一个基础包,包含了强大的N维数组对象和向量运算
数组创建,可以使用array函数从常规的python列表和或元组中创建数组,得到的类型是从列表元素中农推导出来的
使用array函数创建数组,他接受一切序列型的对象,包括其他数组,然后产生一个新的 含有传入数据的numpy数组,其中嵌套数组会被转化为一个多维数组
把列表转化为数组
array=np.array([[1,2,3],[4,5,6]]) print(array,type(array)) #结果: [[1 2 3] [4 5 6]] <class 'numpy.ndarray'> a=np.array([1,2,3,4]) print(a,type(a)) #结果: [1 2 3 4] <class 'numpy.ndarray'>
把元组转化为数组
array1=np.array(((1,2,3),(1,2,3))) print(array1,type(array1)) #结果: [[1 2 3] [1 2 3]] <class 'numpy.ndarray'>
创建初始占位内容的数组,zeros()可以创建指定长度或形状的全0数组 ones()可以创建指定长度或形状的全1数组 empty()可以创建一个数组,他的初始内容是随机的,取决于内存的状态
zeroarray=np.zeros((2,3)) print(zeroarray) #结果: [[0. 0. 0.] [0. 0. 0.]] onesarray=np.ones((3,3)) print(onesarray) #结果: [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] emptyarray=np.empty((3,4)) print(emptyarray) #结果: [[7.06652000e-096 8.48798317e-314 6.01346930e-154 1.21328784e-311] [7.18988866e+140 6.01346953e-154 4.24399158e-313 4.94065646e-324] [1.21333862e-311 4.94065646e-324 1.21333862e-311 9.18024560e+062]]
Numpy提供了一个类似于range的函数,该函数返回数组而不是列表
array2=np.arange(10,31,5) print(array2) #结果: [10 15 20 25 30]
输出数组的维度ndim,输出数组的形状shape,输出数组的元素个数size,元素类型dtype
print(array1) #结果: [[1 2 3] [1 2 3]]
print(array1.ndim)#输出维度 2
print(array1.shape)#输出形状 (2, 3)
print(array1.size)#输出个数 6
print(array1.dtype)#输出元素类型int32
重新定义数组的形状
array3=np.arange(6).reshape([2,3]) print(array3) #结果: [[0 1 2] [3 4 5]] array3=np.array([[1,2,3],[4,5,6]],dtype=np.int64).reshape([3,2]) print(array3) #结果: [[1 2] [3 4] [5 6]]
矩阵的基础运算
arr1=np.array([[1,2,3],[4,5,6]]) arr2=np.ones([2,3],dtype=np.int64) print(arr1+arr2) #结果: [[2 3 4] [5 6 7]] print(arr1-arr2) #结果: [[0 1 2] [3 4 5]] print(arr1*arr2) #结果: [[1 2 3] [4 5 6]] print(arr1/arr2) #结果: [[1. 2. 3.] [4. 5. 6.]] print(arr1**2) #结果: [[ 1 4 9] [16 25 36]]
矩阵的乘法
arr3=np.array([[1,2,3],[4,5,6]]) arr4=np.ones([3,2],dtype=np.int64) print(arr3) print(arr4) print(np.dot(arr3,arr4)) #矩阵的乘法 #结果: [[ 6 6] [15 15]]
矩阵的其他计算
print(arr3) #结果: [[1 2 3] [4 5 6]] print(np.sum(arr3,axis=1))#axis=1是矩阵每一行求和,=0是每一列求和 print(np.sum(arr3,axis=0)) print(np.sum(arr3)) 结果: [ 6 15] [5 7 9] 21 print(np.max(arr3))#矩阵中的最大值,axis=1是每一行的最大值,=0是每一列的最大值 print(np.min(arr3)) #结果: 6 1 print(np.mean(arr3))#矩阵中所有元素的均值,axis=1是每一行的均值,=0是每一列的均值 #结果: 3.5 print(np.argmax(arr3))#如果没有参数,就是最大值的索引 print(np.argmax(arr3,axis=1))#如果加上参数axis=1是a[0][0],a[1][0]和a[0][1],a[1][1]分别进行对比,初始是(0,0)大一次,就在对应的那行加1,比到最后,就是最后的结果了 print(np.argmax(arr3,axis=0))#如果加上参数axis=0是a[0][0],a[0][1]和a[1][0],a[1][1]分别进行对比,初始是(0,0)大一次,就在对应的那行加1,比到最后,就是最后的结果了 #结果: 5 [2 2] [1 1 1] print(np.argmin(arr3)) #结果: 0
矩阵的转置
zhuanzhi=np.transpose(arr3) print(zhuanzhi) #结果: [[1 4] [2 5] [3 6]] #把矩阵或数组降到一维 print(arr3.flatten())#默认是按横向进行降的 print(arr3.flatten('F'))#F参数表示是按竖向进行降的 #结果: [1 2 3 4 5 6] [1 4 2 5 3 6]
数组的索引和切片
arr5=np.arange(0,6).reshape([2,3]) print(arr5) print(arr5[1])#索引为1的那行[3,4,5] print(arr5[1][2])#索引为1行2列的那个值 5 print(arr5[1,2])#索引为1行2列的值 5 print(arr5[1,:])#行索引为1的那行,[3,4,5] print(arr5[:,1])#列索引为1的那列,[1,4] print(arr5[1,0:2])#行索引为1中的列索引为0,1的切片,遵循左闭右开的原则[3,4] #结果: [[0 1 2] [3 4 5]] [3 4 5] 5 5 [3 4 5] [1 4] [3 4]