AIoT阶段一(下)数据探索指南:百万字详解之NumPy进阶——Numpy高级实战第七篇
最编程
2024-02-20 13:56:57
...
2.Numpy 高级
2.1 数据形状改变
2.1.1 数组变形
????我们可以使用 reshape() 方法,把数组任意的进行形状的变化:
import numpy as np nd2 = np.random.randint(0, 100, size = (3, 4)) display(nd2) # 数据重塑 reshape # 我们的 nd2 是一个三行四列的数组,我们可以把它变成四行三列 display(nd2.reshape(4, 3)) # 再来举例,我们把它变成两行六列 # 方法一: display(nd2.reshape(2, 6)) # 方法二: display(nd2.reshape(-1, 6)) # -1 表示的是最后计算:相当于 x * 6 = 3 * 4 ---> x = 2 # -1 适合不关心总数的情况,不关心总数是多少,比较灵活 display(nd2.reshape(-1)) # 相当于 x = 3 * 4 ---> x = 12
2.1.2 数组堆叠
????我们可以使用 concatenate() 进行数组的合并:
arr1 = np.random.randint(0, 10, size = (2, 4)) arr2 = np.random.randint(0, 10, size = (2, 4)) display(arr1, arr2) # 合并,默认进行(xing)行(hang)合并 display(np.concatenate([arr1, arr2])) # 我们还可以合并多个 display(np.concatenate([arr1, arr2, arr1]))
那么我们是否可以合并一个三行四列的数组和一个四行三列的数组呢?
真的没有办法了么?其实不然,我们通过观察这两个数组可以发现,虽然这两个数组的列数不同,但是这两个数组的行数是相同的,故我们可以进行列合并:
arr1 = np.random.randint(0, 10, size = (3, 5)) arr2 = np.random.randint(0, 10, size = (3, 4)) display(arr1, arr2) # axis = 0(默认值),代表行 # axis = 1表示列,-1也可以表示 display(np.concatenate([arr1, arr2], axis = 1)) display(np.concatenate([arr1, arr2], axis = -1))
2.1.3 数组拆分
????使用 split() 函数可以把数组进行拆分:
nd = np.random.randint(0, 100, size = (6, 9)) display(nd) # 行拆分 display(np.split(nd, 2)) # 平均拆分为2份 display(np.split(nd, 3)) # 平均拆分为3份
我们还可以不是平均拆分:
nd = np.random.randint(0, 100, size = (6, 9)) display(nd) # 列表表示按节点进行拆分 np.split(nd, [1, 4, 5]) # 1 切一刀,4 切一刀,5 切一刀 # 分成了 [0, 1) [1, 4) [4, 5) [5, 6)
我们不仅可以拆分行,也可以拆分列,还是和 2.1.2 数组堆叠 一样,参数 axis = 0(默认值),代表行
,axis = 1,代表列
nd = np.random.randint(0, 100, size = (6, 9)) display(nd) np.split(nd, 3, axis = 1) # 平均拆成三分(列拆分) # 列表表示按节点进行拆分 np.split(nd, [1, 4, 5], axis = 1) # 1 切一刀,4 切一刀,5 切一刀 # 分成了 [0, 1) [1, 4) [4, 5) [5, 9)
2.1.4 数组转置
????对于数组的转置,我们可以利用 T 进行转置,也可以使用 numpy 中的 transpose() 方法:
A = np.random.randint(0, 10, size = (3, 5)) display(A) # 所谓转置就是行变列,列边行 display(A.T) # 还可以按照下面的方法进行转置 display(np.transpose(A, axes = [1, 0]))