例如,给定一个python numpy.ndarray a = array([[1, 2], [3, 4], [5, 6]])
,我想选择数组a
的第0行和第2行到新数组b
,这样{{1} }变成b
。
我需要解决方案来处理更常见的问题,其中原始的2d数组可以有更多的行,我应该能够根据一些不相交的范围选择行。一般来说,我一直在寻找适用于一维列表的array([[1,2],[5,6]]
之类的东西,但似乎2d阵列不会这样添加。
更新
似乎我可以使用a[i:j] + a[k:p]
来实现这一点,但有没有优雅的方法来做到这一点?
答案 0 :(得分:5)
您可以使用列表索引:
a[ [0,2], ]
更一般地说,选择行i:j
和k:p
(我假设在python意义上,意思是行i到j但不包括j):
a[ range(i,j) + range(k,p) , ]
请注意,range(i,j) + range(k,p)
会创建[ i, i+1, ..., j-1, k, k+1, ..., p-1 ]
的 flat 列表,然后将其用于索引a
的行。
答案 1 :(得分:2)
numpy
在索引方面有点聪明。你可以给它一个索引列表,它将返回切片部分。
In : a = numpy.array([[i]*10 for i in range(10)])
In : a
Out:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
[4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
[6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
[7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
[8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]])
In : a[[0,5,9]]
Out:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]])
In : a[range(0,2)+range(5,8)]
Out:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
[6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
[7, 7, 7, 7, 7, 7, 7, 7, 7, 7]])