【发布时间】:2019-11-04 09:16:07
【问题描述】:
我在这方面遇到了真正的麻烦。我有一个三维 numpy 数组,我想通过二维索引数组对其进行重新排序。实际上,数组将以编程方式确定,并且三维数组可能是二维或四维的,但为了简单起见,如果两个数组都是二维的,则以下是所需的结果:
ph = np.array([[1,2,3], [3,2,1]])
ph_idx = np.array([[0,1,2], [2,1,0]])
for sub_dim_n, sub_dim_ph_idx in enumerate(ph_idx):
ph[sub_dim_n] = ph[sub_dim_n][sub_dim_ph_idx]
这使得 ph 数组变成:
array([[1, 2, 3],
[1, 2, 3]])
这是我想要的。如果情况相同,谁能帮忙,但是我有一个三维数组(psh)而不是 ph,例如:
psh = np.array(
[[[1,2,3]],
[[3,2,1]]]
)
希望这很清楚,如果不是,请询问。提前致谢!
【问题讨论】:
-
在您的三维案例中,
ph_idx的示例是什么? -
@fuglede - 会是(对此处的格式表示歉意)np.array([[[1,2,3]],[[1,2,3]]])
-
格式化是最好的。这次不是
[3, 2, 1]?您能否提供一个ph形状为(2, 2, 3)的示例? -
所以,我没有提出这个问题,因为我不想让事情变得过于复杂,但 ph 的 dim1 的长度可能大于 1(如 2、2、3 形状你建议)。如果是这样,我正在尝试应用二维数组。在类似 numpy 伪代码的东西中,这将是 ph[ph_idx[:, None, :]]