参考文章:https://jizhi.im/blog/post/live-aipy-part8
import pandas as pd
import numpy as np
一、shape(形状)
1、np.shape
arr = np.array([[ 1, 2, 3, 4],
[12, 13, 14, 5],
[11, 16, 15, 6],
[10, 9, 8, 7]])
print('arr.shape: ', arr.shape)
print('type(arr.shape): ', type(arr.shape)) # shape返回元组
print('row_number:', arr.shape[0]) # 数组的行数
print('column_number:', arr.shape[1]) # 数组的列数
# 输出:
============================================================
arr.shape: (4, 4)
type(arr.shape): <class 'tuple'>
row_number: 4
column_number: 4
============================================================
2、np.reshape
重塑数组的行数和列数
print('=' * 60)
print(arr.reshape(2,8))
print('=' * 60)
arr.reshape(-1)
print('=' * 60)
arr.reshape(-1, 1)
print('=' * 60)
# 输出:
============================================================
[[ 1 2 3 4 12 13 14 5]
[11 16 15 6 10 9 8 7]]
============================================================
array([ 1, 2, 3, 4, 12, 13, 14, 5, 11, 16, 15, 6, 10, 9, 8, 7])
============================================================
array([[ 1],
[ 2],
[ 3],
[ 4],
[12],
[13],
[14],
[ 5],
[11],
[16],
[15],
[ 6],
[10],
[ 9],
[ 8],
[ 7]])
============================================================
二、基本运算
print('=' * 60)
print(arr - 1) # 加法同理
print('=' * 60)
print(arr * 2) # 除法同理
print('=' * 60)
print(arr > 9) # 逻辑判断
print('=' * 60)
print(arr[arr > 9]) # 布尔取值
print('=' * 60)
# 输出:
============================================================
[[ 0 1 2 3]
[11 12 13 4]
[10 15 14 5]
[ 9 8 7 6]]
============================================================
[[ 2 4 6 8]
[24 26 28 10]
[22 32 30 12]
[20 18 16 14]]
============================================================
[[False False False False]
[ True True True False]
[ True True True False]
[ True False False False]]
============================================================
[12 13 14 11 16 15 10]
============================================================
三、数据类型
str_lst = [[0, "zero"], [1, "one"], [2, "two"], [3, "three"]]
str_arr = np.array(str_lst)
print('=' * 60)
print(str_arr)
print('=' * 60)
print(str_arr.dtype) # 数组中出现字符类型,数组的数据类型也会变
print('=' * 60)
print(arr.dtype)
print('=' * 60)
# 输出:
============================================================
[['0' 'zero']
['1' 'one']
['2' 'two']
['3' 'three']]
============================================================
<U11
============================================================
int32
============================================================
四、数组操作
1、.tolist()和.ravel()
arr = np.array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
arr_lst1 = arr.tolist()
print('=' * 60)
print(arr_lst1)
print('=' * 60)
arr.ravel()
print('=' * 60)
arr.ravel()[1]=100
print('=' * 60)
arr.flatten()[1]=200 #返回的是copy
print('=' * 60)
# 输出:
============================================================
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
============================================================
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
============================================================
array([[ 0, 100, 2],
[ 3, 4, 5],
[ 6, 7, 8]])
============================================================
array([[ 0, 100, 2],
[ 3, 4, 5],
[ 6, 7, 8]])
============================================================
2、missing values
arr = np.array([[ 1., 2., 3., 4.],
[ 3., 4., 5., 6.],
[ 5., 6., 7., 8.]])
print('=' * 60)
arr[2,2] = np.nan
arr[2,3] = np.inf
print(arr)
print('=' * 60)
missing = np.isnan(arr) | np.isinf(arr)
arr[missing] = 0
print(arr)
print('=' * 60)
# 输出:
============================================================
[[ 1. 2. 3. 4.]
[ 3. 4. 5. 6.]
[ 5. 6. nan inf]]
============================================================
[[1. 2. 3. 4.]
[3. 4. 5. 6.]
[5. 6. 0. 0.]]
============================================================
五、statistics
arr = np.array([[ 1., 2., 3., 4.],
[ 3., 4., 5., 6.],
[ 5., 6., 7., 8.]])
print('=' * 60)
print(arr.mean()) # 平均值
print(arr.max()) # 最大值
print(arr.min()) # 最小值
print(np.amax(arr, axis=0)) # 最大值(列)
print(np.amax(arr, axis=1)) # 最大值(行)
print('=' * 60)
# 输出
============================================================
4.5
8.0
1.0
[5. 6. 7. 8.]
[4. 6. 8.]
============================================================
六、np.copy()
arr2 = np.copy(arr)
print('=' * 60)
print(arr)
print('=' * 60)
print(arr2)
print('=' * 60)
arr3 = arr - arr2
print(arr3)
print('=' * 60)
# 输出:
============================================================
[[1. 2. 3. 4.]
[3. 4. 5. 6.]
[5. 6. 7. 8.]]
============================================================
[[1. 2. 3. 4.]
[3. 4. 5. 6.]
[5. 6. 7. 8.]]
============================================================
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
七、range()和arange()
range是快速生成数字序列的方法,返回List,而arange返回的数据类型是数组
常见参数:start,end,step(步长)
如range(1,10,1),arange(1,10,1)
lst1 = [x for x in range(10)]
print('=' * 60)
print(lst1)
print(type(lst1))
print(lst1[0])
lst2 = np.arange(10)
print(lst2)
print(type(lst2))
print(lst2[0])
print('=' * 60)
# 输出:
============================================================
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
<class 'list'>
0
[0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>
0
============================================================
八、linspace()/logspace()
类似range,快速生成数字序列,但是比range更方便。
print('=' * 60)
print(np.linspace(1, 10, num = 10)) # num是返回个数
print(np.linspace(1, 10, num = 11))
print(np.logspace(1, 10, num = 10))
print('=' * 60)
# 输出:
============================================================
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[ 1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1 10. ]
[1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09 1.e+10]
============================================================
九、Numpy线性代数
1、向量加减法
u = [1,1,2,3,5,8]
v = [1,1,4,5,1,4]
print('=' * 60)
# without numpy
u_add_v = [ui + vi for ui, vi in zip(u,v)]
print(u_add_v)
u_add_v2 = u + v
print('=' * 60)
print(u_add_v2)
print('=' * 60)
u_arr = np.array(u)
v_arr = np.array(v)
u_add_v3 = u_arr + v_arr
print(u_add_v3)
print('=' * 60)
# 输出:
============================================================
[2, 2, 6, 8, 6, 12]
============================================================
[1, 1, 2, 3, 5, 8, 1, 1, 4, 5, 1, 4]
============================================================
[ 2 2 6 8 6 12]
============================================================
2、向量点乘
print('=' * 60)
# without numpy
u_dot_v = [ui * vi for ui, vi in zip(u,v)]
print(u_dot_v)
print(type(u_dot_v)) # 返回的是List
print('=' * 60)
u_arr = np.array(u)
v_arr = np.array(v)
u_dot_v_np = u_arr * v_arr
print(u_dot_v_np)
print(type(u_dot_v_np)) # 返回的是array
print('=' * 60)
# 输出:
============================================================
[1, 1, 8, 15, 5, 32]
<class 'list'>
============================================================
[ 1 1 8 15 5 32]
<class 'numpy.ndarray'>
============================================================
3、矩阵
print('=' * 60)
A = np.matrix([[3,5,3],
[7,7,5],
[0,7,6]])
print(A)
print('=' * 60)
I = np.eye(6) # 对角线为1的矩阵
print(I)
print('=' * 60)
D = np.diag([0,1,2,3,4]) # 对角线为指定List的矩阵
print(D)
print('=' * 60)
# 输出:
============================================================
[[3 5 3]
[7 7 5]
[0 7 6]]
============================================================
[[1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 1.]]
============================================================
[[0 0 0 0 0]
[0 1 0 0 0]
[0 0 2 0 0]
[0 0 0 3 0]
[0 0 0 0 4]]
============================================================
4、矩阵计算
A = np.matrix([[1,1,4],
[5,1,4],
[8,1,0]])
print('=' * 60)
print(A.T) # 矩阵转置
print('=' * 60)
print(A.I) # 矩阵求逆
print('=' * 60)
# 输出:
============================================================
[[1 5 8]
[1 1 1]
[4 4 0]]
============================================================
[[-0.25 0.25 0. ]
[ 2. -2. 1. ]
[-0.1875 0.4375 -0.25 ]]
============================================================
十、Numpy统计概率
1、方差(variance)
x = np.array([56,42,72,36,63,47,55,49,38,42,68,60])
y = np.array([147,125,160,118,149,128,150,145,115,140,152,155])
print('=' * 60)
varx = ((x - x.mean())**2).mean()
vary = ((y - y.mean())**2).mean()
print(varx)
print(vary)
print('=' * 60)
# 输出:
============================================================
129.22222222222223
208.3888888888889
============================================================
2、协方差(covariance)
print('=' * 60)
covxy = ((x - x.mean()) * (y - y.mean())).mean()
print(covxy)
print('=' * 60)
# 输出:
============================================================
147.05555555555557
============================================================