目录
前言
莫烦老师Numpy教程,将所有代码和对应的输出记录在博客中,方便自己后续查看
作者:莫烦Python
转自:https://mofanpy.com/tutorials/data-manipulation/numpy/
视频:【莫烦Python】Numpy & Pandas(数据处理教程)
代码:https://github.com/MorvanZhou/tutorials/tree/master/numpy%26pandas
环境:python-3.9.13 numpy-1.21.5
1.numpy属性
- 维度:array.dims
- 形状:array.shape
- 大小:array.size
import numpy as np
array = np.array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]])
print("number of dim:", array.ndim)
print("shape:", array.shape)
print("size:", array.size)
运行结果如下:
number of dim: 2
shape: (3, 3)
size: 9
2.numpy的array创建
- 方法一:np.array
- dtype指定类型
- 方法二:np.zeros/np.ones/np.empty
- shape可通过元组/列表指定
- 方法三:np.arange
- (起始值,终止值,步长)
- (值).reshape(rows,cols)
- 方法四:np.linspace
- (起始值,终止值,总元素).reshape(rows,cols)
import numpy as np
# 方法1:np.array
array1 = np.array([2, 3, 4])
array2 = np.array([[1, 2, 3],
[4, 5, 6]], dtype=np.float32)
print("array1:\n", array1)
print("array2:\n", array2)
# 方法2:np.zeros/np.ones/np.empty
array3 = np.zeros((3, 4))
array4 = np.ones((3, 4))
array5 = np.empty((3, 4))
print("array3:\n", array3)
print("array4:\n", array4)
print("array5:\n", array5)
# 方法3:np.arange
array6 = np.arange(10, 20, 2)
array7 = np.arange(12).reshape(3, 4)
print("array6:\n", array6)
print("array7:\n", array7)
# 方法4:np.linspace
array8 = np.linspace(1, 10, 5)
array9 = np.linspace(5, 10, 6).reshape(2, 3)
print("array8:\n", array8)
print("array9:\n", array9)
运行结果如下:
array1:
[2 3 4]
array2:
[[1. 2. 3.]
[4. 5. 6.]]
array3:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
array4:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
array5:
[[6.23042070e-307 1.89146896e-307 1.37961302e-306 6.23053614e-307]
[6.23053954e-307 9.34609790e-307 8.45593934e-307 9.34600963e-307]
[1.86921143e-306 6.23061763e-307 8.45590539e-307 8.34445562e-308]]
array6:
[10 12 14 16 18]
array7:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
array8:
[ 1. 3.25 5.5 7.75 10. ]
array9:
[[ 5. 6. 7.]
[ 8. 9. 10.]]
3.numpy的基础运算
- + / - / ** / sin / < > ==
- * / np.dot a.dot /
- *代表按元素xiangc
- np.dot代表矩阵相乘
- sum / min / max
- axis=0,以行为基准,求取的是每一列
- axis=1,以列为基准,求取的是每一行
import numpy as np
# + / - / ** / sin / < > ==
print("==========/ + / - / ** / sin / < > == /==========")
a = np.array([1, 2, 3, 4])
b = np.arange(4)
c_1 = a + b
c_2 = a - b
c_3 = b ** 2
c_4 = np.sin(a)
c_5 = b < 2
print("a", a)
print("b", b)
print("a+b:", c_1)
print("a-b:", c_2)
print("b^2:", c_3)
print("sin(a):", c_4)
print("b<2:", c_5)
# * / np.dot a.dot /
print("==========/ * / np.dot a.dot /==========")
a = np.array([[1, 2],
[2, 3]])
b = np.arange(4).reshape(2, 2)
c_1 = a * b # 对应元素相乘
c_2 = np.dot(a, b) # 矩阵相乘
print("a:\n", a)
print("b:\n", b)
print("a*b:\n", c_1)
print("a@b:\n", c_2)
# sum / min / max
print("==========/ sum / min / max /==========")
a = np.random.random((2, 4))
print("a\n", a)
print("sum", np.sum(a))
print("min", np.min(a, axis=1)) # 每行求min
print("max", np.max(a, axis=0)) # 每列求max
运行结果如下:
==========/ + / - / ** / sin / < > == /==========
a [1 2 3 4]
b [0 1 2 3]
a+b: [1 3 5 7]
a-b: [1 1 1 1]
b^2: [0 1 4 9]
sin(a): [ 0.84147098 0.90929743 0.14112001 -0.7568025 ]
b<2: [ True True False False]
==========/ * / np.dot a.dot /==========
a:
[[1 2]
[2 3]]
b:
[[0 1]
[2 3]]
a*b:
[[0 2]
[4 9]]
a@b:
[[ 4 7]
[ 6 11]]
==========/ sum / min / max /==========
a
[[0.83919862 0.38688114 0.06607408 0.42812918]
[0.79844368 0.58625999 0.72225084 0.38427147]]
sum 4.211508995766072
min [0.06607408 0.38427147]
max [0.83919862 0.58625999 0.72225084 0.42812918]
4.numpy的基础运算2
- np.argmin / np.argmax / np.mean / np.average / np.median
- np.argmin(a, axis=None, out=None) 默认将输入数组展平,返回索引
- np.cumsum / np.diff / np.nonzero / np.sort / np.transpose / np.clip
- np.clip(A, min=, max=) A中小于min的截取为min,大于max的截取为max
import numpy as np
# np.argmin np.argmax np.mean(axis) np.average np.median
array = np.arange(2, 8).reshape(2, 3)
print("array:\n", array)
print("argmin:", np.argmin(array))
print("argmax:", np.argmax(array))
print("mean:", np.mean(array))
print("mean(axis=0):", np.mean(array, axis=0))
print("average:", np.average(array))
print("median:", np.median(array))
# np.cumsum np.diff np.nonzero np.sort np.transpose/A.T np.clip
print("cumsum:", np.cumsum(array))
print("diff:\n", np.diff(array))
print("nonzero", np.nonzero(array))
print("sort:\n", np.sort(array))
print("transpose:\n", np.transpose(array))
print("clip:\n", np.clip(array, 4, 6))
运行结果如下:
array:
[[2 3 4]
[5 6 7]]
argmin: 0
argmax: 5
mean: 4.5
mean(axis=0): [3.5 4.5 5.5]
average: 4.5
median: 4.5
cumsum: [ 2 5 9 14 20 27]
diff:
[[1 1]
[1 1]]
nonzero (array([0, 0, 0, 1, 1, 1], dtype=int64), array([0, 1, 2, 0, 1, 2], dtype=int64))
sort:
[[2 3 4]
[5 6 7]]
transpose:
[[2 5]
[3 6]
[4 7]]
clip:
[[4 4 4]
[5 6 6]]
5.numpy的索引
- A[2] A[1][1] A[1,1]
- A[2,:] A[:,1] A[1,1:3]
- row col item
import numpy as np
# A[2] A[1][1] A[1,1]
A = np.arange(2, 14).reshape(3, 4)
print("A:\n", A)
print("A[2]:", A[2])
print("A[1][1]:", A[1][1])
print("A[1,1]:", A[1,1])
# A[2,:] A[:,1] A[1, 1:3]
print("A[2,:]:", A[2,:])
print("A[:,1]:", A[:,1])
print("A[1,1:3]:", A[1,1:3])
# row col item
for i, row in enumerate(A):
print(f"row_{i}:", row)
for i, col in enumerate(A.T):
print(f"col_{i}:", col)
for item in A.flat:
print(item)
运行结果如下:
A:
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
A[2]: [10 11 12 13]
A[1][1]: 7
A[1,1]: 7
A[2,:]: [10 11 12 13]
A[:,1]: [ 3 7 11]
A[1,1:3]: [7 8]
row_0: [2 3 4 5]
row_1: [6 7 8 9]
row_2: [10 11 12 13]
col_0: [ 2 6 10]
col_1: [ 3 7 11]
col_2: [ 4 8 12]
col_3: [ 5 9 13]
2
3
4
5
6
7
8
9
10
11
12
13
6.numpy的array合并
- np.vstack(上下) np.hstack(左右)
- A[np.newasix,:] 在行上添加一个维度 A[:,np.newasix] 在列上添加一个维度
- np.concatenate((A,B),axis=0)
import numpy as np
# np.vstack(上下) np.hstack(左右)
A = np.array([1,1,1])
B = np.array([2,2,2])
print("A:", A)
print("B:", B)
print("vstack:\n", np.vstack((A, B)))
print("hstack:", np.hstack((A, B)))
# A[np.newasix,:] 在行上添加一个维度
# A[:,np.newasix] 在列上添加一个维度
C = A[np.newaxis, :]
D = A[:, np.newaxis]
print("C:", C)
print("D:\n", D)
# np.concatenate((A,B),axis=0)
A = np.arange(1, 7).reshape(2, 3)
B = np.arange(7, 13).reshape(2, 3)
E = np.concatenate((A, B),axis=0)
print("E:\n", E)
运行结果如下:
A: [1 1 1]
B: [2 2 2]
vstack:
[[1 1 1]
[2 2 2]]
hstack: [1 1 1 2 2 2]
C: [[1 1 1]]
D:
[[1]
[1]
[1]]
E:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
7.numpy的array分割
- np.split np.array_split
- np.vsplit np.hsplit
A:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
split:
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
array_split:
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
vsplit:
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
hsplit:
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
8.numpy的copy & deep copy
- copy
- deep copy
import numpy as np
# copy
a = np.arange(4)
b = a
c = b
print("a:", a)
a[0] = 1
print("a:", a)
print("b:", b)
print("c:", c)
print(b is a)
print(c is a)
# deep copy
a = np.arange(4)
d = a.copy()
a[0] = 1
print("a:", a)
print("d:", d)
print(d is a)
运行结果如下:
a: [0 1 2 3]
a: [1 1 2 3]
b: [1 1 2 3]
c: [1 1 2 3]
True
True
a: [1 1 2 3]
d: [0 1 2 3]
False
结语
代码仅供自己参考,大家可以查看对应的教程视频自行学习