导入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]] a=np.array([1,2,3,4])print(a,type(a))#结果:
[1 2 3 4]
把元组转化为数组
array1=np.array(((1,2,3),(1,2,3)))print(array1,type(array1))#结果:
[[1 2 3]
[1 2 3]]
创建初始占位内容的数组,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]