1

除了第二列和最后一列之间的列之外,我正在尝试对下面的数组进行切片以获取第 2 行和第 3 行以及第一列,但是我尝试过的每个切片似乎都不起作用。例如,下面的第一个打印语句由于括号中的 : 给出了语法错误。我也尝试简单地连接数组,但我认为这不是解决这个问题的最有效方法。

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]))

任何建议将不胜感激。

4

1 回答 1

2

我不知道这是否是您要求的,但请尝试

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 列表一样被切片,但尺寸增加了一些技巧,但我仍然发现这个解决方案与嵌套或循环重塑相比非常优雅,但有时​​这并不总是最终的解决方案。

编辑:

它看起来不太好,但比重塑或巨大的矩阵变化要好

y[1:3, [0, 2:-1]]这与无需重塑数组或遍历多余元素的说法相同,您可以通过制作[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]])
于 2012-05-03T17:38:06.320 回答