我有一个多维数组,我希望得到1D
切片,例如mega_array[:, i, j, k, .....]
为此,我尝试numpy.ndindex:
for idx in np.ndindex(mega_array.shape[1:]):
print mega_array[:, index]
但是唉:这仍然给了我多维切片,其中只有维度,除了第一个,等于一。
我想将切片用作l值,因此,简单的ravel()不适用于此。
我应该使用什么来获得正常的1D切片?
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.
答案 0 :(得分:2)
您需要向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数组大小写
答案 1 :(得分:1)
您可以使用np.dstack
按序列深度方式(沿第三轴)堆叠数组。 :
>>> a
array([[[ 7, 40, 5],
[777, 440, 0]],
[[ 8, 41, 6],
[778, 441, 1]]])
>>> np.dstack(a)
array([[[ 7, 8],
[ 40, 41],
[ 5, 6]],
[[777, 778],
[440, 441],
[ 0, 1]]])
同样根据您的尺寸,您可以使用其他numpy连接功能:http://docs.scipy.org/doc/numpy/reference/routines.array-manipulation.html#joining-arrays
答案 2 :(得分:0)
你需要transpose矩阵来获取行吗?
In [5]: in_array = numpy.asarray([[7, 40], [777, 440]])
In [6]: in_array.transpose()[0]
Out[6]: array([ 7, 777])
答案 3 :(得分:0)
发布3D示例后,现在我看到了您想要做的事情。以下内容适用于具有3个以上维度的数组:
保存尺寸>中的项目数量0,
nitems = np.product(in_array.shape[1:])
重塑数组(类似于Kasra指出的np.dstack),
new_array = np.reshape(in_array, [in_array.shape[0], nitems])
循环新数组:
for i in range(new_array.shape[1]):
print(new_array[:, i])
对我来说,这给出了预期的输出。