数据分析-NumPy读书笔记
读书笔记-NumPy
利用Python进行数据分析读书笔记-Numpy部分
2021.8.5
1、基本
- 代码块
import numpy as np
data1 = np.array([1,2,3,4])
print(data1)
arr1 = np.full((2,3),1,'float')
print(arr1)
arr1.astype('int32')
print(arr1)
arr = np.arange(1,43,2)
arr[5:9] = 10
print(arr)
arr[:] = 9
print(arr)
- 运行结果
[1 2 3 4] [[1. 1. 1.] [1. 1. 1.]] [[1. 1. 1.] [1. 1. 1.]] [ 1 3 5 7 9 10 10 10 10 19 21 23 25 27 29 31 33 35 37 39 41] [9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9]
2、副本与视图
- 代码块
# 副本与视图的区别
arr = np.arange(1,10,1)
# 视图
arr_view1 = arr
arr_view2 = arr.view()
# 副本
arr_copy = arr.copy()
arr[3:6] = 0
print("View1",arr_view1)
print("View2",arr_view2)
print("Copy",arr_copy)
- 运行结果
View1 [1 2 3 0 0 0 7 8 9] View2 [1 2 3 0 0 0 7 8 9] Copy [1 2 3 4 5 6 7 8 9]
3、批量修改矩阵的值
- 代码块
# 批量修改矩阵的值
arr = np.arange(1,10,1)
print(arr == 0)
arr[arr==0] = 999
print(arr)
arr[[1,3,4]] = 0
print(arr)
- 运行结果
[False False False False False False False False False] [1 2 3 4 5 6 7 8 9] [1 0 3 0 0 6 7 8 9]
4、切片索引、一些好用的索引方法
- 代码块
arr = np.arange(32).reshape((8,4))
print(arr[[0,2,3],[0,3,3]])
print(arr[0][0],arr[2][3],arr[3][3])
print("arr > 9:",arr[arr > 9])
print(arr)
- 运行结果
[ 0 11 15] 0 11 15 arr > 9: [10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]]
5、transpose的参数问题
- 代码块
arr = np.arange(32).reshape((2,4,4))
print("arr",arr)
print("arr_0_1_2",arr.transpose(0,1,2)) # 0,1,2代表三个轴都不变
arr_1_0_2 = arr.transpose(1,0,2) # 0轴和1轴换了
print("arr_1_0_2",arr_1_0_2)
- 运行结果
arr [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]]] arr_0_1_2 [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]]] arr_1_0_2 [[[ 0 1 2 3] [16 17 18 19]] [[ 4 5 6 7] [20 21 22 23]] [[ 8 9 10 11] [24 25 26 27]] [[12 13 14 15] [28 29 30 31]]]
6、NumPy的一些函数
7、meshgrid()
输入的x,y,就是网格点的横纵坐标列向量(非矩阵)
输出的X,Y,就是坐标矩阵。
- 代码块
x = np.array([[0, 1, 2], [0, 1, 2]])
y = np.array([[0, 0, 0], [1, 1, 1]])
X, Y = np.meshgrid(x, y)
print(X)
print(Y)
plt.plot(X, Y,marker='.',linestyle='')
plt.grid(True)
plt.show()
- 运行结果
[[0 1 2 0 1 2] [0 1 2 0 1 2] [0 1 2 0 1 2] [0 1 2 0 1 2] [0 1 2 0 1 2] [0 1 2 0 1 2]] [[0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] [1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1]]
8、条件逻辑在数组中的应用
1、原始方法
缺点:
①处理速度比较慢
②无法用于多维数组
- 代码块
# 原始方法
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
# 如果c是true返回x,否则返回y
result = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]
print(result)
- 运行结果
[1.1, 2.2, 1.3, 1.4, 2.5]
2、np.where()
- 代码块
# np.where()
arr = np.arange(1,20)
print(arr)
np.where(arr>10,0,1)
- 运行结果
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
Out[89]:
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])
9、数学上的一些统计方法
- sort() 排序
10、any和all
any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True。
- 代码块
arr = np.array([True,False,True])
print(arr.any())
print(arr.all())
- 运行结果
True False