np.arange(int a)
生成一个一维array,元素个数是a个,元素是0到a-1
注意arange不能直接生成多维array
np.arange(int a).reshape(int b,int c)
生成一个一维array,个数为a,然后改成二维数组b*c,b*c=a;也可更多维
reshape与原shape无关,只要总元素个数符合即可
reshape返回的对象实际是原array的一个引用,仅形式不一样,改变一个,两个都会变
np.arange(int a, dtype=np.uint8)
生成一个类型为np.uint8(或其他参数)的一维数组,个数为a
np.arange(a,b)
生成一个array,从a开始,到b以内,间隔为1,浮点数则间隔为1.0
np.arange(a,b,c)
生成一个array,从a开始,到b以内,间隔为c
array的直接赋值不产生新的array
np.zeros()构造一个全0.0的array
np.ones()构造一个全1.0的array
np.full( (tuple shape) , num ) 构造一个全为num的array,大小由shape规定
np.eye( int d )构造一个d维(d*d)的单位矩阵array
1 import numpy as np
2 a = np.array([[1,2,3],[1,2]])
3 print("a", a)
4 b = a
5 print("b is a? ", b is a)
6 c = np.zeros((3,4))
7 print("c", c)
8 d = np.ones((3,4),dtype=np.int16)
9 print("d", d)
10 e = np.empty((3,4))
11 print("e", e)
12 f = np.arange(10.1,20.0)
13 print("f", f)
14 g = np.arange(12).reshape((3,4)).reshape((2,2,3))
15 h = g.reshape((3,4))
16 h[0][0] = 100
17 print("h is g?", h is g)
18 print(g)
19 i = np.linspace(1,10,19)
20 print("i", i)
a [list([1, 2, 3]) list([1, 2])]
b is a? True
c [[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
d [[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
e [[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
f [10.1 11.1 12.1 13.1 14.1 15.1 16.1 17.1 18.1 19.1]
h is g? False
[[[100 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
i [ 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5
8. 8.5 9. 9.5 10. ]
np.array(list l)
用list类型的对象l生成一个新的array
np.array(ndarray l)
用ndarray类型的对象l生成一个新的array
np.asarray(list l)
用list类型的对象l生成一个新的array
np.asarray(ndarray l)
用ndarray类型的对象l生成一个array,但两者是同一个对象
1 a = [0,1,2]
2 b = np.arange(3)
3 c = np.array(a)
4 d = np.array(b)
5 e = np.asarray(a)
6 f = np.asarray(b)
7 a[0] = 1
8 b[0] = 1
9 print(c,d)
10 print(e,f)
11 print("f is b?", f is b)
[0 1 2] [0 1 2]
[0 1 2] [1 1 2]
f is b? True
a.copy()将a的值copy出来,生成一个新对象
1 a = np.ones((1,3))
2 b = a.copy()
3 b[0][0] = 0
4 print(a,b)
[[1. 1. 1.]] [[0. 1. 1.]]
a.ndim
维数
a.shape
形状,几乘几乘几的array
a.size
元素个数
a.dtype
元素类型
1 print(a.ndim)
2 print(a.shape)
3 print(a.size)
4 print(a.dtype)
5 print(type(a))
2
(2, 3)
6
float64
<class 'numpy.ndarray'>
基本运算都是对于array内的元素的运算
运算,+-*\&|^等二元运算符运用于两个shape相同的array间,结果是对应位置的元素分别运算
幂次**等运算符结果是每个元素分别进行幂运算
比较运算同样是对每个元素进行操作
np.sin(ndarray a)
np.cos(ndarray a)
np.tan(ndarray a)
1 a = np.arange(2,5)
2 b = np.arange(1,4)
3 print(a,b)
4 print(a+b,a-b,a*b,a/b,a&b,a|b,a^b)
5 print(a**3)
6 print(a<b,a<3)
7 print(np.sin(a))
[2 3 4] [1 2 3]
[3 5 7] [1 1 1] [ 2 6 12] [2. 1.5 1.33333333] [0 2 0] [3 3 7] [3 1 7]
[ 8 27 64]
[False False False] [ True False False]
[ 0.90929743 0.14112001 -0.7568025 ]
np.dot(ndarray a,ndarray b)
a.dot(ndarray b)
对于一维array,效果同向量点积,需满足长度相等
对于高维array,效果为矩阵乘法,需满足矩乘要求
a.transpose()或a.T矩阵转置,对一维array无效
1 a = np.arange(0,6)
2 print("1: ", a,a.T)
3 print("2: ", a.dot(a))
4 a = a.reshape((2,3))
5 print("3: ", a)
6 print("4: ", a.T)
7 print("5: ", a.transpose())
8 print("6: ", a.dot(a.T))
9 print("7: ", a.T.dot(a))
1: [0 1 2 3 4 5] [0 1 2 3 4 5]
2: 55
3: [[0 1 2]
[3 4 5]]
4: [[0 3]
[1 4]
[2 5]]
5: [[0 3]
[1 4]
[2 5]]
6: [[ 5 14]
[14 50]]
7: [[ 9 12 15]
[12 17 22]
[15 22 29]]
np.random.random(shape)根据shape随机生成array,元素在0到1间
np.median(ndarray a[, axis=0])中位数
np.average(ndarray a[, axis=0])均值
np.diff(ndarray a[, axis=0])差分
a.max([axis=0])
a.min([axis=0])
a.sum([axis=0])
a.cumsum([axis=0])前缀和
a.mean([axis=0])求均值
a.argmax([axis=0])这个函数应该是对于值相同的情况取其中的第一个
np.sort(ndarray a[, axis=0])排序,默认按最高维排序
np.sqrt(ndarray a)对每个元素分别开方
定义axis则对于某一维进行分别运算
1 a = np.random.random((2,5))
2 print("a", a)
3 print("sum", a.sum())
4 print("cumsum 1", a.cumsum())
5 print("cumsum 2", a.cumsum(axis=0))
6 print("diff", np.diff(a))
7 print("argmax", a.argmax(axis=0))
8 print("max", a.max(axis=1))
9 print("mean", a.mean(axis=1))
10 print("median", np.median(a,axis=1))
11 print("sort", np.sort(a,axis=0))
a [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077]
[0.79646881 0.30153261 0.06144976 0.46015996 0.61220888]]
sum 4.463890979638066
cumsum 1 [0.17921251 0.74507874 1.21644692 1.31848019 2.23207096 3.02853977
3.33007238 3.39152214 3.8516821 4.46389098]
cumsum 2 [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077]
[0.97568132 0.86739883 0.53281794 0.56219323 1.52579964]]
diff [[ 0.38665372 -0.09449805 -0.36933491 0.81155749]
[-0.49493621 -0.24008284 0.3987102 0.15204892]]
argmax [1 0 0 1 0]
max [0.91359077 0.79646881]
mean [0.44641419 0.446364 ]
median [0.47136818 0.46015996]
sort [[0.17921251 0.30153261 0.06144976 0.10203327 0.61220888]
[0.79646881 0.56586623 0.47136818 0.46015996 0.91359077]]
a.nonzero()输出所有非零元素的下标,输出结果为一个tuple,共维数个array,表示所有元素的每一维下标
a.clip(min,max)将小于min值的设为min值,大于max值的设为max值,返回为新的array
1 a = np.arange(0,16).reshape((2,2,2,2))
2 print(a)
3 print(a.nonzero())
4 print(np.zeros(10).nonzero())
[[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]]
[[[ 8 9]
[10 11]]
[[12 13]
[14 15]]]]
(array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64), array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], dtype=int64), array([0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int64), array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=int64))
(array([], dtype=int64),)
1 a = np.random.random((2,5))
2 print(a)
3 print(a.clip(0.25,0.75))
[[0.13959892 0.82723864 0.46736009 0.81501597 0.73909778]
[0.93349076 0.46512676 0.49638509 0.81460657 0.98483514]]
[[0.25 0.75 0.46736009 0.75 0.73909778]
[0.75 0.46512676 0.49638509 0.75 0.75 ]]
a.flatten()将a所有元素列成一个一维array
a.flat a的迭代器
1 a = np.arange(0,6).reshape((2,3))
2 print(a)
3 print(a.flatten())
4 for item in a.flat:
5 print(item)
[[0 1 2]
[3 4 5]]
[0 1 2 3 4 5]
0
1
2
3
4
5
a[np.newaxis]将原对象作为一个元素放进一个array里,即在最外面加了一维
a[:[,:],np.newaxis]按照np.newaxis之前的切片表示的遍历最小元素,将每个元素放进一个array
这种操作都没有产生新的对象
1 a = np.arange(0,6)
2 print(a[np.newaxis])
3 print(a[:,np.newaxis])
4 a[np.newaxis][0][1] = 0
5 print(a)
6 print("a[np.newaxis][0][1] is a?",a[np.newaxis][0][1] is a)
7 b = np.arange(0,6).reshape((2,3))
8 print("1: ", b[np.newaxis])
9 print("2: ", b[:,np.newaxis])
10 print("3: ", b[:,:,np.newaxis])
[[0 1 2 3 4 5]]
[[0]
[1]
[2]
[3]
[4]
[5]]
[0 0 2 3 4 5]
a[np.newaxis][0][1] is a? False
1: [[[0 1 2]
[3 4 5]]]
2: [[[0 1 2]]
[[3 4 5]]]
3: [[[0]
[1]
[2]]
[[3]
[4]
[5]]]
np.vstack(ndarray a, ndarray b[,...])将a、b整体进行连接,合成一个ndarray,要求a和b除第一维外其余维一样,合并后得到的第一维为a、b的第一维相加,第二维shape不变
np.hstack(ndarray a, ndarray b[,...])将a、b的每一个第一维元素进行连接,合成一个ndarray,要求第二维外其余维一样,合并后第二维为a、b的第二维相加,其余维不变
np.concatenate((ndarray a, ndarray b[,...]),axis=0)可以自由定义以第几维进行连接,除指定维外其余维一样
对于一维array,运算时当做1*n的array进行连接,运算完h连接会产生1*2n的array,仍变成一维的长2n的array,而v连接产生2*n的array
连接操作均返回新的对象
1 a = np.arange(0,6).reshape((2,3))
2 b = np.arange(6,12).reshape((2,3))
3 print("a: ", a)
4 print("b: ", b)
5 print("vab: ", np.vstack((a,b)))
6 print("hab: ", np.hstack((a,b)))
7 print(a.shape,b.shape,np.vstack((a,b)).shape)
8 print(a.shape,b.shape,np.hstack((a,b)).shape)
9 a = np.arange(0,6)
10 b = np.arange(6,12)
11 print("a: ", a)
12 print("b: ", b)
13 print("vab: ", np.vstack((a,b)))
14 print("hab: ", np.hstack((a,b)))
15 print(a.shape,b.shape,np.vstack((a,b)).shape)
16 print(a.shape,b.shape,np.hstack((a,b)).shape)
17 a = np.arange(0,6).reshape((1,6))
18 b = np.arange(6,12).reshape((1,6))
19 print("a: ", a)
20 print("b: ", b)
21 print("vab: ", np.vstack((a,b)))
22 print("hab: ", np.hstack((a,b)))
23 print(a.shape,b.shape,np.vstack((a,b)).shape)
24 print(a.shape,b.shape,np.hstack((a,b)).shape)
a: [[0 1 2]
[3 4 5]]
b: [[ 6 7 8]
[ 9 10 11]]
vab: [[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
hab: [[ 0 1 2 6 7 8]
[ 3 4 5 9 10 11]]
(2, 3) (2, 3) (4, 3)
(2, 3) (2, 3) (2, 6)
a: [0 1 2 3 4 5]
b: [ 6 7 8 9 10 11]
vab: [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
hab: [ 0 1 2 3 4 5 6 7 8 9 10 11]
(6,) (6,) (2, 6)
(6,) (6,) (12,)
a: [[0 1 2 3 4 5]]
b: [[ 6 7 8 9 10 11]]
vab: [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
hab: [[ 0 1 2 3 4 5 6 7 8 9 10 11]]
(1, 6) (1, 6) (2, 6)
(1, 6) (1, 6) (1, 12)
1 a = np.arange(0,6).reshape((2,3))
2 b = np.arange(6,10).reshape((2,2))
3 print("a: ", a)
4 print("b: ", b)
5 print("hab: ", np.hstack((a,b)))
6 print(a.shape,b.shape,np.hstack((a,b)).shape)
7 a = np.arange(0,6).reshape((3,2))
8 b = np.arange(6,10).reshape((2,2))
9 print("a: ", a)
10 print("b: ", b)
11 print("vab: ", np.vstack((a,b)))
12 print(a.shape,b.shape,np.vstack((a,b)).shape)
13 a = np.arange(0,12).reshape((2,2,3))
14 b = np.arange(12,20).reshape((2,2,2))
15 print("a: ", a)
16 print("b: ", b)
17 print("cab-2: ", np.concatenate((a,b),axis=2))
18 print(a.shape,b.shape,np.concatenate((a,b),axis=2).shape)
a: [[0 1 2]
[3 4 5]]
b: [[6 7]
[8 9]]
hab: [[0 1 2 6 7]
[3 4 5 8 9]]
(2, 3) (2, 2) (2, 5)
a: [[0 1]
[2 3]
[4 5]]
b: [[6 7]
[8 9]]
vab: [[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
(3, 2) (2, 2) (5, 2)
a: [[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
b: [[[12 13]
[14 15]]
[[16 17]
[18 19]]]
cab-2: [[[ 0 1 2 12 13]
[ 3 4 5 14 15]]
[[ 6 7 8 16 17]
[ 9 10 11 18 19]]]
(2, 2, 3) (2, 2, 2) (2, 2, 5)
1 a = np.arange(0,6)
2 b = np.arange(6,12)
3 np.hstack((a,b))[0] = 100
4 np.hstack((a,b))[6] = 100
5 print(a)
6 print(b)
[0 1 2 3 4 5]
[ 6 7 8 9 10 11]
np.vsplit(ndarray a, b)将a对第一维进行拆分成b等份
np.hsplit(ndarray a, b)将a对第二维进行拆分成b等份
np.split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b等份
np.array_split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b份,允许不等分,此时会尽量均等,多出部分从前到后分配
1 a = np.arange(6).reshape((2,3))
2 print(a)
3 print(np.vsplit(a,2))
4 print(np.hsplit(a,3))
5 print(np.split(a,2,axis=0))
6 print(np.split(a,3,axis=1))
7 print(np.array_split(a,2,axis=1))
[[0 1 2]
[3 4 5]]
[array([[0, 1, 2]]), array([[3, 4, 5]])]
[array([[0],
[3]]), array([[1],
[4]]), array([[2],
[5]])]
[array([[0, 1, 2]]), array([[3, 4, 5]])]
[array([[0],
[3]]), array([[1],
[4]]), array([[2],
[5]])]
[array([[0, 1],
[3, 4]]), array([[2],
[5]])]
np.empty_like( array x ):返回一个大小和类型与x相同的array,但其中内容并未初始化,可能为随机值
np.zeros_like( array x ):返回一个大小与x相同,但元素全为 0 的array
np.ones_like( array x ):返回一个大小与x相同,但元素全为 1 的array
np.tile( array x, tuple shape):返回一个大小为 x 的维分别于 shape 的维相乘的 array,即将 x copy了 shape遍。