Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:what';将二维数组中的特定行选择到新数组中是一种优雅的方法吗?_Python_Arrays - Fatal编程技术网

Python:what';将二维数组中的特定行选择到新数组中是一种优雅的方法吗?

Python:what';将二维数组中的特定行选择到新数组中是一种优雅的方法吗?,python,arrays,Python,Arrays,例如,给定一个python numpy.ndarraya=array([[1,2],[3,4],[5,6]]),我想将数组a的第0行和第2行选择到一个新数组b,这样b就变成数组([[1,2],[5,6]]) 我需要解决更一般的问题,原始2d数组可以有更多的行,我应该能够根据一些不相交的范围选择行。一般来说,我在寻找类似于a[I:j]+a[k:p]的东西,它适用于一维列表,但似乎2d数组不会以这种方式相加 更新 似乎我可以使用vstack((a[I:j],a[k:p])来实现这一点,但是有什么优雅

例如,给定一个python numpy.ndarray
a=array([[1,2],[3,4],[5,6]])
,我想将数组
a
的第0行和第2行选择到一个新数组
b
,这样
b
就变成
数组([[1,2],[5,6]]

我需要解决更一般的问题,原始2d数组可以有更多的行,我应该能够根据一些不相交的范围选择行。一般来说,我在寻找类似于
a[I:j]+a[k:p]
的东西,它适用于一维列表,但似乎2d数组不会以这种方式相加

更新
似乎我可以使用
vstack((a[I:j],a[k:p])
来实现这一点,但是有什么优雅的方法可以做到这一点吗?

您可以使用列表索引:

a[ [0,2], ]
更一般地说,要选择行
i:j
k:p
(我假设是python意义上的,意思是行i到j,但不包括j):


请注意,
range(i,j)+range(k,p)
创建了一个
[i,i+1,…,j-1,k,k+1,…,p-1]
的平面列表,然后用它来索引
a
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]])

+1不过,我发现元组通常看起来不那么奇怪。
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]])