Numpy cheat

1
import numpy as np

axis = 0 是从左往右看

axis = 1 是从上往下看

创建 Arrays

三种办法

  1. array 函数:接受一切序列型的对象(list/set/tuple/ndarray)
  2. zeros/ones/empty 函数,传入一个表示形状的元组(tuple)
  3. linspace 函数 /arange 函数
1
2
a = np.array([1, 2, 3])
a
array([1, 2, 3])
1
2
b = np.array([(1.5, 2, 3), (4, 5, 6)], dtype=float)
b
array([[1.5, 2. , 3.],
       [4. , 5. , 6.]])
1
2
c = np.array([[(1.5, 2, 3), (4, 5, 6)], [(3, 2, 1), (4, 5, 6)]], dtype=float)
c
array([[[1.5, 2. , 3.],
        [4. , 5. , 6.]],

       [[3. , 2. , 1.],
        [4. , 5. , 6.]]])

另外两种创建方式

1
np.zeros((3, 4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
1
np.ones((2, 3, 4), dtype=np.int16)
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int16)
1
2
d = np.arange(10, 25, 5)
d
array([10, 15, 20])
1
np.linspace(0, 2, 9)
array([0.  , 0.25, 0.5 , 0.75, 1.  , 1.25, 1.5 , 1.75, 2.])
1
2
e = np.full((2, 2), 7)
e
array([[7, 7],
       [7, 7]])
1
2
f = np.eye(2)
f
array([[1., 0.],
       [0., 1.]])
1
np.random.random((2, 2))
array([[0.15483956, 0.38346647],
       [0.13780649, 0.21760297]])
1
np.empty((3, 2))
array([[1.5, 4.],
       [2. , 5.],
       [3. , 6.]])

IO

保存二进制文件

1
2
3
4
np.save('my_array', a)
np.savez('my_array', a, b)

np.load('my_array.npy')
array([1, 2, 3])

保存文本文件

1
2
3
4
np.savetxt("myarray.csv", a, delimiter=',')

np.loadtxt('myarray.csv')
np.genfromtxt('myarray.csv', delimiter=',')
array([1., 2., 3.])

data types

1
np.int64, np.float32, np.complex, np.bool, np.object, np.string_, np.unicode_
(numpy.int64, numpy.float32, complex, bool, object, numpy.bytes_, numpy.str_)

查看 arr 属性

1
a.shape, len(a), b.ndim, e.size, b.dtype, b.dtype.name, b.astype(int)
((3,), 3, 2, 4, dtype('float64'), 'float64', array([[1, 2, 3],
        [4, 5, 6]]))

数学操作

1
2
print("a =", a)
print("b =", b)
a =  [1 2 3]
b =  [[1.5 2.  3.]
 [4.  5.  6.]]
1
2
g = a - b
g
array([[-0.5,  0. ,  0.],
       [-3. , -3. , -3.]])
1
np.subtract(a, b)
array([[-0.5,  0. ,  0.],
       [-3. , -3. , -3.]])
1
b + a
array([[2.5, 4. , 6.],
       [5. , 7. , 9.]])
1
np.add(b, a)
array([[2.5, 4. , 6.],
       [5. , 7. , 9.]])
1
a / b
array([[0.66666667, 1.        , 1.],
       [0.25      , 0.4       , 0.5]])
1
np.divide(a, b)
array([[0.66666667, 1.        , 1.],
       [0.25      , 0.4       , 0.5]])
1
a * b
array([[1.5,  4. ,  9.],
       [4. , 10. , 18.]])
1
np.multiply(a, b)
array([[1.5,  4. ,  9.],
       [4. , 10. , 18.]])
1
np.exp(b)
array([[4.48168907,   7.3890561 ,  20.08553692],
       [54.59815003, 148.4131591 , 403.42879349]])
1
np.sqrt(b)
array([[1.22474487, 1.41421356, 1.73205081],
       [2.        , 2.23606798, 2.44948974]])
1
np.sin(a)
array([0.84147098, 0.90929743, 0.14112001])
1
np.cos(b)
array([[0.0707372 , -0.41614684, -0.9899925],
       [-0.65364362,  0.28366219,  0.96017029]])
1
np.log(a)
array([0.        , 0.69314718, 1.09861229])
1
2
print("e =", e)
print("f =", f)
e =  [[7 7]
 [7 7]]
f =  [[1. 0.]
 [0. 1.]]
1
e.dot(f) # 这是 Hadamard 积
array([[7., 7.],
       [7., 7.]])

比较

1
a == b # 元素级别的比较
array([[False,  True,  True],
       [False, False, False]])
1
a < 2
array([True, False, False])
1
np.array_equal(a, b) # 数组级别的比较
False

聚集函数

1
a
array([1, 2, 3])
1
a.sum()
6
1
a.min()
1
1
b
array([[1.5, 2. , 3.],
       [4. , 5. , 6.]])
1
b.max(axis=0)
array([4., 5., 6.])
1
b.cumsum(axis=1)
array([[1.5,  3.5,  6.5],
       [4. ,  9. , 15.]])
1
a.mean()
2.0
1
np.std(b)
1.5920810978785667

复制 arr

1
h = a.view()
1
np.copy(a)
array([1, 2, 3])
1
h = a.copy() # 深拷贝

排序 arr

1
2
a.sort()
a
array([1, 2, 3])
1
c
array([[[1.5, 2. , 3.],
        [4. , 5. , 6.]],

       [[3. , 2. , 1.],
        [4. , 5. , 6.]]])
1
2
c.sort(axis=0)
c
array([[[1.5, 2. , 1.],
        [4. , 5. , 6.]],

       [[3. , 2. , 3.],
        [4. , 5. , 6.]]])

subsetting, slicing, indexing

一个 [] 就是子集

1
a[2]
3
1
b[1, 2]
6.0

一个 [:] 就是切片

1
a[0:2]
array([1, 2])
1
b[0:2, 1]
array([2., 5.])
1
b[:1]
array([[1.5, 2. , 3.]])
1
c[1, ...]
array([[3., 2., 3.],
       [4., 5., 6.]])
1
a[::-1]
array([3, 2, 1])

其他乱七八糟的就是 index,包括 [[]]<

1
a[a < 2]
array([1])
1
b[[1, 0, 1, 0], [0, 1, 2, 0]]
array([4. , 2. , 6. , 1.5])
1
b[[1, 0, 1, 0]][:, [0, 1, 2, 0]]
array([[4. , 5. , 6. , 4.],
       [1.5, 2. , 3. , 1.5],
       [4. , 5. , 6. , 4.],
       [1.5, 2. , 3. , 1.5]])

Array 操作

转置

1
b
array([[1.5, 2. , 3.],
       [4. , 5. , 6.]])
1
2
i = np.transpose(b)
i
array([[1.5, 4.],
       [2. , 5.],
       [3. , 6.]])
1
i.T
array([[1.5, 2. , 3.],
       [4. , 5. , 6.]])

改变 shape

1
b.ravel()
array([1.5, 2. , 3. , 4. , 5. , 6.])
1
2
print("g =", g)
g.reshape(3, -2)
g =  [[-0.5  0.   0.]
 [-3.  -3.  -3.]]





array([[-0.5,  0.],
       [0. , -3.],
       [-3. , -3.]])

增删元素

1
np.append(h, g)
array([None, -0.5, 0.0, 0.0, -3.0, -3.0, -3.0], dtype=object)
1
np.insert(a, 1, 5)
array([1, 5, 2, 3])
1
np.delete(a, [1])
array([1, 3])

连接

1
np.concatenate((a, d), axis=0)
array([1,  2,  3, 10, 15, 20])
1
2
3
print('a =', a)
print('b =', b)
np.vstack((a, b))
a =  [1 2 3]
b =  [[1.5 2.  3.]
 [4.  5.  6.]]





array([[1. , 2. , 3.],
       [1.5, 2. , 3.],
       [4. , 5. , 6.]])

和上面的功能一样

1
2
3
print('e =', e)
print('f =', f)
np.r_[e, f]
e =  [[7 7]
 [7 7]]
f =  [[1. 0.]
 [0. 1.]]





array([[7., 7.],
       [7., 7.],
       [1., 0.],
       [0., 1.]])
1
np.hstack((e, f))
array([[7., 7., 1., 0.],
       [7., 7., 0., 1.]])
1
np.column_stack((a, d))
array([[1, 10],
       [2, 15],
       [3, 20]])

划分 arr

1
np.hsplit(a, 3)
[array([1]), array([2]), array([3])]
1
np.vsplit(c, 2)
[array([[[1.5, 2. , 1.],
         [4. , 5. , 6.]]]), array([[[3., 2., 3.],
         [4., 5., 6.]]])]