NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。
定义数组
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b=np.arange(5) #从0开始取整,不包括最后一位
c= np.linspace(0, 100, 5) #从0-100平均分成5分
输出结果:
a=[1,2,3,4,5] b=([0, 1, 2, 3, 4]) c=([0,25,50,75,100])
a = np.array([[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]])
print(a[2,4]) # a的第3行第5列 a[2,4]=15
print(a[0, 1:4]) #a的第一行 第2-4列(1:4 包含头部 不包括尾部) a[0, 1:4]=[2,3,4]
print(a[::2,::2]) # 每隔两行取一行 , 每隔两列取一列 a[::2,::2] =([[1,3,5],[11,13,15],[21,23,25]])
print(a.shape) #shape属性 描述的是a的尺寸 (5,5)
普通运算——对应元素操作
import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum=a+b
difference = a - b
输出结果:
sum=[[6,8]
[10,12]]
difference=[[-4,-4]
[-4,-4]]
如果想要运用矩阵乘法
a.dot(b)
数组特殊运算符
a = np.arange(10)
print(a.sum()) # >>>45
print(a.min()) # >>>0
print(a.max()) # >>>9
print(a.cumsum()) # >>>[ 0 1 3 6 10 15 21 28 36 45]
reshape
a=np.arange(25)
print(a) # 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])
a.reshape(5,5) # 将a整合成5*5的矩阵
zeros
使用zeros函数创建一个填充零的数组。函数的参数表示行数和列数(或其维数)。
np.zeros((2,4)) #>>生成一个2行4列填充零的数组
ones
使用ones函数创建一个填充零的数组。函数的参数表示行数和列数(或其维数)。
np.ones((2,4)) #>>生成一个2行4列填充1的数组
eye
eye函数可以创建一个n * n矩阵,对角线为1,其他为0。
NumPy提供了多种文件操作函数方便我们存取数组内容。文件存取的格式分为两类:二进制和文本。而二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型。
使用数组的方法函数tofile可以方便地将数组中数据以二进制的格式写进文件。tofile输出的数据没有格式,因此用numpy.fromfile读回来的时候需要自己格式化数据:
numpy.load和numpy.save函数以NumPy专用的二进制类型保存数据,这两个函数会自动处理元素类型和shape等信息,使用它们读写数组就方便多了,但是numpy.save输出的文件很难和其它语言编写的程序读入:
>>> a = np.arange(0,12)
>>> a.shape = 3,4
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> np.save("a.npy", a)
>>> c = np.load( "a.npy" )
>>> c
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
由于Python中的布尔运算使用and、or和not等关键字,它们无法被重载,因此数组的布尔运算只能通过相应的ufunc函数进行。
>>> a = np.arange(5)
>>> b = np.arange(4,-1,-1)
>>> a == b
array([False, False, True, False, False], dtype=bool)
>>> a > b
array([False, False, False, True, True], dtype=bool)
>>> np.logical_or(a==b, a>b) # 和 a>=b 相同 array([False, False, True, True, True], dtype=bool)
可以使用数组的any()或all()方法。只要数组中有一个值为True,则any()返回True;而只有数组的全部元素都为True,all()才返回True。
>>> np.any(a==b)
True
>>> np.any(a==b) and np.any(a>b)
True
数组的sort()方法用于对数组进行排序,它将改变数组的内容。而sort()函数则返回一个新数组,不改变原始数组。它们的axis参数默认值都为-1,即沿着数组的最后一个轴进行排序。 sort()函数的axis参数可以设置为None,此时它将得到平坦化之后进行排序的新数组。
>>> np.sort(a) #对每行的数据进行排序
>>> np.sort(a, axis=0) #对每列的数据进行排序
用median()可以获得数组的中值,即对数组进行排序之后,位于数组中间位置的值,当长度是偶数时,得到正中间两个数的平均值。