是否可以在不使用for循环的情况下展平具有两个不同主阶的数组?

问题描述 投票:0回答:1

在Python中,我想展平一个3维的数组。假设形状 = [10, 15, 200]。但前两个需要按行主要顺序进行展平,而其余的展平操作将以列主要顺序完成。

我可能可以以 for 循环方式迭代操作,例如切片数组、单独展平数组并将其存储到主数组中。例如,

我会将主数组切片为 [10,15] 进行行主要展平 --> 使用 [150,200] 将其存储到主数组,然后进行列主要展平操作。

我不确定这是否是最有效的方法。有没有更好的方法使用 numpy 调用来做到这一点?

python arrays numpy flatten
1个回答
0
投票

首先在前两个维度上使用

.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])
© www.soinside.com 2019 - 2024. All rights reserved.