#导入模块,重命名为np import numpy as np a = np.array([7,8,9,10],dtype = int) #列表转化为一行四列数组 b = np.arange(4) #生成[0,1,2,3]数组 #一维数组上的操作 c1 = a - b #对应的元素相减 c2 = a + b #对应的元素相加 c3 = a * b #对应的元素相乘 c4 = a / b #对应的元素相除 c5 = a** 2 #a中各个元素的平方 c6 = 2*np.sin(a) #10倍的sin(a) print(b < 3) # array([ True, True, True, False], dtype=bool) print(b == 3) # array([False, False, False, True], dtype=bool) #真正的矩阵乘法 a1 = np.array([[0,1],[1,1]]) #列表转化为2行2列数组 b1 = np.arange(4).reshape(2,2) #生成[[0,1],[2,3]] c7= np.dot(a,b) #a,b数组以行乘列的形式[[2,4],[2,3]] c8 = a.dot(b) #作用等价于c7 c9 = a @ b #作用等价于dot() #基本方法 a2 = np.random.random((2,4)) #生成2行4列0-1之间的数组 np.sum(a2) #求和,a2.sum(axis=0)求每列的和 np.min(a2) #求最小,a2.min(axis=0)求每列的最小值 np.max(a2) #求最大,a2.max(axis=0)求每列的最大值 np.max(a2,axis = 0) #求最大,axis = 0是以列作为查找单元,axis = 1是以列作为查找单元 np.exp(a2) #以e为底的指数函数 np.sqrt(a2) #根号 #类似于+=或者*=这类的操作会直接更改原有数组,并且结果数组会向更加精确和一般的数组类型转变靠拢(向上转换) a1*= 3 #a1永久更改 a2+=a1 #a2永久更改 a1+=a2 #输出a1会报错,因为结果数组元素是float型,但是结果元组是a1向int型靠拢,所以报错 a3 = np.arange(2,14).reshape((3,4)) #2-13形成3行4列的数组 np.argmax(a3) #求最大值的索引为0 np.argmin(a3) #求最小值的索引为11 np.average(a3) #求平均值 np.mean(a3) #同求平均值 np.median(a3) #求中位数 np.cumsum(a3) #从首项开始逐个累加生成数组,[2 5 9 14 20 27 35 44 54 65 77 90] np.diff(a3) #从每一行尾项开始与前一个累减生成数组,所以是三行三列[[1,1,1],[1,1,1],[1,1,1]] np.nonzero(a3) #分别以每个元素的行、列生成两个数组# (array([0,0,0,0,1,1,1,1,2,2,2,2]),array([0,1,2,3,0,1,2,3,0,1,2,3])) np.sort(a3) #对每一行进行从小到大的排序 np.transpose(a3) #矩阵转置 print(a3.T) #也是专转置 print(np.clip(a3,5,9)) #a3中大于等于9的位置写9,5-9之间的位置写原值,小于等于5的位置写5 # array([[ 9, 9, 9, 9] # [ 9, 9, 8, 7] # [ 6, 5, 5, 5]])
其他常见函数:
all
,any
,apply_along_axis
,argmax
,argmin
,argsort
,average
,bincount
,ceil
,clip
,conj
,corrcoef
,cov
,cross
,cumprod
,cumsum
,diff
,dot
,floor
,inner
, INV ,lexsort
,max
,maximum
,mean
,median
,min
,minimum
,nonzero
,outer
,prod
,re
,round
,sort
,std
,sum
,trace
,transpose
,var
,vdot
,vectorize
,where
power()介绍:作用类似于a**b即a的b次方。注意在Numpy计算中要考虑数据溢出的问题,例如Numpy中的int与Python中的int有所不同,Numpy中int有严格的位数限制,如32位或者64位(64位仍然不够的时候会走动转化为浮点数),而Python中的int是灵活的,NumPy分别提供
numpy.iinfo
并numpy.finfo
验证NumPy整数和浮点值的最小值或最大值。import numpy as np np.iinfo(np.int) # Bounds of the default integer on this system. >>>iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64) np.iinfo(np.int32) # Bounds of a 32-bit integer >>>iinfo(min=-2147483648, max=2147483647, dtype=int32) np.iinfo(np.int64) # Bounds of a 64-bit integer >>>iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64) print(np.power(2, 3)) #8 print(np.power([2,3,4], 3)) #分别求 2, 3, 4 的 3 次方[ 8 27 64] print(np.power(2, [2,3,4])) #分别求 2的 2, 3, 4 次方[ 4 8 16] print(np.power([2,3], [3,4])) #分别求 2 的 3 次方和 3 的 4 次方[ 8 81]
indices()的用法:返回的是一个行列的索引,然后可以用这个索引快速的创建二维数据。即利用数组的坐标快速生成新的数组。
import numpy as np print( np.indices((3,3))) #array([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[0, 1, 2], [0, 1, 2], [0, 1, 2]]]) i, j = np.indices((2,3)) M = 2*i + 3*j print(M) ''' array([[0, 3, 6], [2, 5, 8]]) ''' #利用矩阵画圆 img = np.zeros((400,400)) ir,ic = np.indices(img.shape) circle = (ir-135)**2+(ic-150)**2 < 30**2 # 半径30,圆心在135,150 img[circle]=1