如何在2d数组中选择特定的行和列



如果我有一个2d数组,比如

A = np.arange(16).reshape(4,4)

如何通过参数选择row = [0, 2]column = [0, 2] ?在MATLAB中,我可以简单地执行A[row, column],但在python中,这将选择对应于(0,0)和(2,2)的2个元素。

无论如何我都可以使用MATLAB中的一些参数来做到这一点?输出应该是这样的[0 2

8 10]

要选择元素块-如MATLAB所做的那样,第一个索引必须是列向量。有几种方法可以做到这一点:

In [19]: A = np.arange(16).reshape(4,4)
In [20]: row=[0,2];column=[0,2]
In [21]: A[np.ix_(row,column)]
Out[21]: 
array([[ 0,  2],
       [ 8, 10]])
In [22]: np.ix_(row,column)
Out[22]: 
(array([[0],
        [2]]), array([[0, 2]]))
In [23]: A[[[0],[2]],[0,2]]
Out[23]: 
array([[ 0,  2],
       [ 8, 10]])

另一个答案使用meshgrid。我们大概可以列出六种变化。

本节的良好文档:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html purely-integer-array-indexing

您可以使用以下

A = np.arange(16).reshape(4,4)
print np.ravel(A[row,:][:,column])

:

array([ 0,  2,  8, 10])

MATLAB创建二维网格时,索引的向量跨维度。在MATLAB中,你会得到-

A =
     0     1     2     3
     4     5     6     7
     8     9    10    11
    12    13    14    15
>> row = [1, 3]; column = [1, 3];
>> A(row,column)
ans =
     0     2
     8    10

现在,在NumPy/Python中,跨维度的向量索引选择从这些向量中的每个元素创建tuplets后的元素。为了复制MATLAB行为,您需要从向量中创建这样的索引网格。同样,您可以使用np.meshgrid -

In [18]: A
Out[18]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
In [19]: row = [0, 2]; column = [0, 2];
In [20]: C,R = np.meshgrid(row,column)
In [21]: A[R,C]
Out[21]: 
array([[ 0,  2],
       [ 8, 10]])

相关内容

  • 没有找到相关文章

最新更新