我试图对下面的数组进行切片,以获取第 2 行和第 3 行以及第一列以及第二列和最后一列之间的列,但我尝试过的每个切片似乎都不起作用。例如,下面的第一个 print 语句由于括号中的 : 而给出语法错误。我也尝试过简单地连接数组,但我认为这不是解决此问题的最有效方法。
import numpy as np
y = np.arange(35).reshape(5, 7)
# My ultimate goal is to do a slice similar to this expression, but this of course gives
# an error.
print y[[1, 2], [0, 2:-1]]
# This works, but I feel it is inefficient, although I could be wrong.
print np.hstack((y[[1, 2], 0][:, np.newaxis], y[[1, 2], 2:-1]))
如有任何建议,我们将不胜感激。
最佳答案
我不知道这是否是您所要求的,但请尝试
In [11]: y[2:4,[1,3,4,5,6]]
Out[11]:
array([[15, 17, 18, 19, 20],
[22, 24, 25, 26, 27]])
In [12]:
Numpy 可以像标准 Python 列表一样进行切片,但维度增加了一些技巧,但我仍然发现这个解决方案与嵌套或循环 reshape 相比非常优雅,但有时这并不总是最终的解决方案.
编辑:
它看起来不太好,但比 reshape 或巨大的矩阵变化要好
这与 y[1:3, [0, 2:-1]]
相同,无需 reshape 数组或迭代多余元素,您可以指定您关心的索引通过创建 [0] +
该维度中剩余列的列表。
In [33]: y[1:3, [0] + list(xrange(2,y.shape[1]))]
Out[33]:
array([[ 7, 9, 10, 11, 12, 13],
[14, 16, 17, 18, 19, 20]])
关于python - Numpy 高级切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436168/