我有一个多维数组,我想在其中获取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阵列盒