python - Numpy 高级切片

标签 python numpy slice

我试图对下面的数组进行切片,以获取第 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/

相关文章:

python - 具有子集属性的 SQL 查询过滤器

arrays - 如何解压 slice

Python on Arm,非法指令

Python shutil.copytree() 在那里跟踪复制的状态

python - 检查大量 numpy 矩阵中的三角不等式

python - Lru_cache(来自 functools)如何工作?

python - Numpy:高级切片

Python:是否可以有一个类方法作用于类的一部分?

python gspread - 如何删除/删除 google-sheet-API 中的列

python - 如何最好地在 tensorflow 中实现矩阵掩码操作?