在Python中,我想展平一个3维的数组。假设形状 = [10, 15, 200]。但前两个需要按行主要顺序进行展平,而其余的展平操作将以列主要顺序完成。
我可能可以以 for 循环方式迭代操作,例如切片数组、单独展平数组并将其存储到主数组中。例如,
我会将主数组切片为 [10,15] 进行行主要展平 --> 使用 [150,200] 将其存储到主数组,然后进行列主要展平操作。
我不确定这是否是最有效的方法。有没有更好的方法使用 numpy 调用来做到这一点?
首先在前两个维度上使用
.reshape
和默认 "C"
排序(行优先),然后使用 .flatten
和 "F"
排序(列优先)以获得最终结果。
import numpy as np
a = np.arange(3*4*5).reshape(3,4,5)
b = a.reshape(-1, a.shape[1]).flatten("F")
结果:
array([ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 1, 5,
9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 2, 6, 10, 14,
18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 3, 7, 11, 15, 19, 23,
27, 31, 35, 39, 43, 47, 51, 55, 59])