1 | import numpy as np |
axis = 0 是从左往右看
axis = 1 是从上往下看
创建 Arrays
三种办法
- array 函数:接受一切序列型的对象(
list
/set
/tuple
/ndarray
) - zeros/ones/empty 函数,传入一个表示形状的元组(tuple)
- linspace 函数 /arange 函数
1 | a = np.array([1, 2, 3]) |
array([1, 2, 3])
1 | b = np.array([(1.5, 2, 3), (4, 5, 6)], dtype=float) |
array([[1.5, 2. , 3.],
[4. , 5. , 6.]])
1 | c = np.array([[(1.5, 2, 3), (4, 5, 6)], [(3, 2, 1), (4, 5, 6)]], dtype=float) |
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 | d = np.arange(10, 25, 5) |
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 | e = np.full((2, 2), 7) |
array([[7, 7],
[7, 7]])
1 | f = np.eye(2) |
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 | np.save('my_array', a) |
array([1, 2, 3])
保存文本文件
1 | np.savetxt("myarray.csv", a, 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 | print("a =", a) |
a = [1 2 3]
b = [[1.5 2. 3.]
[4. 5. 6.]]
1 | g = a - b |
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 | print("e =", e) |
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 | a.sort() |
array([1, 2, 3])
1 | c |
array([[[1.5, 2. , 3.],
[4. , 5. , 6.]],
[[3. , 2. , 1.],
[4. , 5. , 6.]]])
1 | c.sort(axis=0) |
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 | i = np.transpose(b) |
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 | print("g =", g) |
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 | print('a =', a) |
a = [1 2 3]
b = [[1.5 2. 3.]
[4. 5. 6.]]
array([[1. , 2. , 3.],
[1.5, 2. , 3.],
[4. , 5. , 6.]])
和上面的功能一样
1 | print('e =', e) |
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.]]])]