我有一个多维数组,我想在其中获取1D
切片,例如mega_array[:, i, j, k, .....]
为此,我尝试 numpy.ndindex:
for idx in np.ndindex(mega_array.shape[1:]):
print mega_array[:, index]
但是可惜:这仍然给了我多维切片,其中只有除第一个维度之外的维度等于 1。
我想使用切片作为左值,因此,简单的 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.
最佳答案
您需要将切片
添加到索引
。
在:
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 数组情况
关于python - numpy.ndindex 和数组切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29651027/