python - numpy.ndindex 和数组切片

标签 python numpy

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

相关文章:

python - 在 python pandas 过滤器中编辑数据并将其应用到原始数据框

python - 简化循环内的 numpy.dot

python - numpy atleast_3d() 的行为

python - Django:将此行的 urls.py 中的使用 'url' 更改为 'path' (?P<hierarchy>.+)

python - 逐字分割阿拉伯语单词python

python - 帖子中的评论

python - 在 Python 中按顺序执行命令?

python - 从文本文件创建字典 Python Numpy

python - 绘制回归线

python - 图像拟合和插值