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遍。