Numpy Advanced Slicing

时间:2012-05-03 17:10:05

标签: python numpy slice

我正在尝试切割下面的数组以获取第2行和第3行以及除第2列和最后一列之间的列之外的第一列,但我尝试的每个切片似乎都不起作用。例如,下面的第一个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]))

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分: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]])