numpy.ndindex和数组切片 - python

我有一个多维数组,我想在其中获取1D切片,例如mega_array[:, i, j, k, .....]

为此,我尝试numpy.ndindex:

for idx in np.ndindex(mega_array.shape[1:]):
    print mega_array[:, index]

但是可惜:这仍然给了我多维切片,其中除第一个维度外,第一个维度等于一个。

我想将切片用作l值,因此,简单的ravel()不适合这里。

我应该使用什么来获取正常的一维切片?

UPD:这是一个小例子:

in_array = np.asarray([[7, 40], [777, 440]])
    for index in np.ndindex(in_array.shape[1:]):
        print "---"
    print index
    print in_array[:, index] # gives 2D array

UPD:这是一个3D示例:

in_array = np.asarray([[[7, 40, 5], [777, 440, 0]], [[8, 41, 6], [778, 441, 1]]])
print in_array
print in_array.shape
# print in_array[:, 0, 2]
for index in np.ndindex(in_array.shape[1:]):
    print index
    print in_array[:, index]  # FAILS

# expected [7, 8], [40, 41], [5, 6], [778, 441] and so on.

python大神给出的解决方案

您需要将slice添加到index

在:

in_array = np.asarray([[7, 40], [777, 440]])
for index in np.ndindex(in_array.shape[1:]):
    print "---"
    print index
    print in_array[:, index] # gives 2D array

index具有类似(0,)(1,)的值,即元组。

in_array[:,(1,)]in_array[:,1]不同。要获得后者,您需要使用in_array[(slice(None),1)]slice必须是索引元组的一部分。我们可以通过串联元组来做到这一点。

in_array = np.asarray([[7, 40], [777, 440]])
for index in np.ndindex(in_array.shape[1:]):
    print "---"
    index = (slice(None),)+index
    print index
    print in_array[index]

印刷:

---
(slice(None, None, None), 0)
[  7 777]
---
(slice(None, None, None), 1)
[ 40 440]

同样的调整应适用于nD阵列盒