ndarray
a = np.array([1,2,3])
[1 2 3]
a = np.array([[1, 2], [3, 4]])
[[1 2]
[3 4]]
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
[[1 2 3 4 5]]
a = np.array([1, 2, 3], dtype = complex)
[1.+0.j 2.+0.j 3.+0.j]
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
数组属性
a = np.arange(24)
print (a.ndim)
b = a.reshape(2,4,3)
print (b.ndim)
a = np.array([[1,2,3],[4,5,6]])
print (a.shape)
(2, 3)
a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
或者
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
[[1 2]
[3 4]
[5 6]]
创建数组
x = np.empty([3,2], dtype = int)
[[ 6917529027641081856 5764616291768666155]
[ 6917529027641081859 -5764598754299804209]
[ 4497473538 844429428932120]]
x = np.zeros(5)
[0. 0. 0. 0. 0.]
y = np.zeros((5,), dtype = np.int)
[0 0 0 0 0]
x = np.ones(5)
[1. 1. 1. 1. 1.]
x = np.ones([2,2], dtype = int)
[[1 1]
[1 1]]
从已有的数组创建数组
x = [1,2,3]
a = np.asarray(x)
[1 2 3]
x = (1,2,3)
a = np.asarray(x)
[1 2 3]
x = [(1,2,3),(4,5)]
a = np.asarray(x)
[(1, 2, 3) (4, 5)]
x = [1,2,3]
a = np.asarray(x, dtype = float)
[ 1. 2. 3.]
从数值范围创建数组
x = np.arange(5)
[0 1 2 3 4]
x = np.arange(5, dtype = float)
[0. 1. 2. 3. 4.]
x = np.arange(10,20,2)
[10 12 14 16 18]
切片和索引
a = np.arange(10)
s = slice(2,7,2)
print (a[s])
[2 4 6]
a = np.arange(10)
b = a[2:7:2]
[2 4 6]
a = np.arange(10)
b = a[5]
5
a = np.arange(10)
print(a[2:])
[2 3 4 5 6 7 8 9]
a = np.arange(10)
print(a[2:5])
[2 3 4]
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a[1:])
[[3 4 5]
[4 5 6]]
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print (a[...,1])
print (a[1,...])
print (a[...,1:])
[2 4 5]
[3 4 5]
[[2 3]
[4 5]
[5 6]]
高级索引
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0,1,2], [0,1,0]]
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
[[5 6]
[8 9]]
[[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print (x[x > 5])
[ 6 7 8 9 10 11]
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print (a[~np.isnan(a)])
[ 1. 2. 3. 4. 5.]
x=np.arange(32).reshape((8,4))
print (x[[4,2,1,7]])
[[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])
[[ 4 7 5 6]
[20 23 21 22]
[28 31 29 30]
[ 8 11 9 10]]
广播(Broadcast)
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
[ 10 40 90 160]
a = np.array([[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]])
b = np.array([1,2,3])
print(a + b)
[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]
迭代数组
a = np.arange(6).reshape(2,3)
for x in np.nditer(a):
print (x, end=", " )
0, 1, 2, 3, 4, 5,
print ('以 C 风格顺序排序:')
for x in np.nditer(a, order = 'C'):
print (x, end=", " )
print ('\n')
print ('以 F 风格顺序排序:')
for x in np.nditer(a, order = 'F'):
print (x, end=", " )
原始数组是:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
以 C 风格顺序排序:
0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55,
以 F 风格顺序排序:
0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55,
for x in np.nditer(a, op_flags=['readwrite']):
x[...]=2*x
[[ 0 10 20 30]
[ 40 50 60 70]
[ 80 90 100 110]]
数组操作
a = np.arange(8)
b = a.reshape(4,2)
[[0 1]
[2 3]
[4 5]
[6 7]]
a = np.arange(9).reshape(3,3)
for row in a:
print (row)
[0 1 2]
[3 4 5]
[6 7 8]
for element in a.flat:
print (element)
0
1
2
3
4
5
6
7
8
a = np.arange(8).reshape(2,4)
[[0 1 2 3]
[4 5 6 7]]
print (a.flatten())
[0 1 2 3 4 5 6 7]
print (a.flatten(order = 'F'))
[0 4 1 5 2 6 3 7]
print (a.ravel())
[0 1 2 3 4 5 6 7]
print (a.ravel(order = 'F'))
[0 4 1 5 2 6 3 7]
a = np.arange(12).reshape(3,4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print (np.transpose(a))
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
print (a.T)
a = np.arange(8).reshape(2,2,2)
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
print(np.where(a==6))
(array([1]), array([1]), array([0]))
print(a[1,1,0])
6
b = np.rollaxis(a,2,0)
[[[0 2]
[4 6]]
[[1 3]
[5 7]]]
print(np.where(b==6))
(array([0]), array([1]), array([1]))
c = np.rollaxis(a,2,1)
[[[0 2]
[1 3]]
[[4 6]
[5 7]]]
print(np.where(c==6))
(array([1]), array([0]), array([1]))
a = np.arange(8).reshape(2,2,2)
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
print (np.swapaxes(a, 2, 0))
[[[0 4]
[2 6]]
[[1 5]
[3 7]]]
x = np.arange(9).reshape(1,3,3)
[[[0 1 2]
[3 4 5]
[6 7 8]]]
y = np.squeeze(x)
[[0 1 2]
[3 4 5]
[6 7 8]]
数组 x 和 y 的形状:
(1, 3, 3) (3, 3)
a = np.array([[1,2,3],[4,5,6]])
[[1 2 3]
[4 5 6]]
b = np.resize(a, (3,2))
[[1 2]
[3 4]
[5 6]]
a = np.array([[1,2,3],[4,5,6]])
[[1 2 3]
[4 5 6]]
print (np.append(a, [7,8,9]))
[1 2 3 4 5 6 7 8 9]
print (np.append(a, [[7,8,9]],axis = 0))
[[1 2 3]
[4 5 6]
[7 8 9]]
print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))
[[1 2 3 5 5 5]
[4 5 6 7 8 9]]
a = np.array([[1,2],[3,4],[5,6]])
[[1 2]
[3 4]
[5 6]]
print (np.insert(a,3,[11,12]))
[ 1 2 3 11 12 4 5 6]
print (np.insert(a,1,[11],axis = 0))
[[ 1 2]
[11 11]
[ 3 4]
[ 5 6]]
print (np.insert(a,1,11,axis = 1))
[[ 1 11 2]
[ 3 11 4]
[ 5 11 6]]
a = np.arange(12).reshape(3,4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print (np.delete(a,5))
未传递 Axis 参数。 在插入之前输入数组会被展开。
[ 0 1 2 3 4 6 7 8 9 10 11]
print (np.delete(a,1,axis = 1))
[[ 0 2 3]
[ 4 6 7]
[ 8 10 11]]
a = np.array([5,2,6,2,7,5,6,8,2,9])
u = np.unique(a)
[2 5 6 7 8 9]
u,indices = np.unique(a, return_index = True)
[1 0 2 4 7 9]
算术函数
a = np.arange(9, dtype = np.float_).reshape(3,3)
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]]
b = np.array([10,10,10])
[10 10 10]
print (np.add(a,b))
[[10. 11. 12.]
[13. 14. 15.]
[16. 17. 18.]]
print (np.subtract(a,b))
[[-10. -9. -8.]
[ -7. -6. -5.]
[ -4. -3. -2.]]
print (np.multiply(a,b))
[[ 0. 10. 20.]
[30. 40. 50.]
[60. 70. 80.]]
print (np.divide(a,b))
[[0. 0.1 0.2]
[0.3 0.4 0.5]
[0.6 0.7 0.8]]
a = np.array([0.25, 1.33, 1, 100])
print (np.reciprocal(a))
[4. 0.7518797 1. 0.01 ]
a = np.array([10,20,30])
b = np.array([3,5,7])
print (np.mod(a,b))
[1 0 2]
print (np.remainder(a,b))
[1 0 2]