【发布时间】:2015-02-02 12:49:37
【问题描述】:
我有一个 ND numpy 数组(比如说 3x3x3),我想从中提取一个子数组,结合切片和索引数组。例如:
import numpy as np
A = np.arange(3*3*3).reshape((3,3,3))
i0, i1, i2 = ([0,1], [0,1,2], [0,2])
ind1 = j0, j1, j2 = np.ix_(i0, i1, i2)
ind2 = (j0, slice(None), j2)
B1 = A[ind1]
B2 = A[ind2]
我希望 B1 == B2,但实际上,形状不同
>>> B1.shape
(2, 3, 2)
>>> B2.shape
(2, 1, 2, 3)
>>> B1
array([[[ 0, 2],
[ 3, 5],
[ 6, 8]],
[[ 9, 11],
[12, 14],
[15, 17]]])
>>> B2
array([[[[ 0, 3, 6],
[ 2, 5, 8]]],
[[[ 9, 12, 15],
[11, 14, 17]]]])
有人明白为什么吗?知道如何通过仅操作“A”和“ind2”对象来获得“B1”吗?目标是它适用于任何 nD 数组,并且我不必寻找我想要完全保留的维度的形状(希望我足够清楚:))。谢谢!!
---编辑---
更清楚地说,我想要一个“有趣”的功能,这样
A[fun(ind2)] == B1
【问题讨论】:
-
我认为这是你不想要的:
ind2 = (i0, np.arange(A.shape[1]).reshape(-1,1), i2) -
B2 = select(A,"0,1;:;0,2")够用吗?如果您愿意,我可以发布答案。 -
理想情况下,我更喜欢保留符号 B2 = A[ind3],否则,这意味着我必须替换一个很长的程序中的每个索引......但不幸的是,我不确定我的问题有一个简单的解决方案。
标签: python arrays numpy multidimensional-array slice