Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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 如何从矩阵中选择特定的列索引?_Python_Arrays_Numpy - Fatal编程技术网

Python 如何从矩阵中选择特定的列索引?

Python 如何从矩阵中选择特定的列索引?,python,arrays,numpy,Python,Arrays,Numpy,我有一个矩阵和一个列索引列表,我想从矩阵中为每一行选择。我在努比怎么做 my_matrix = np.array([[1, 2], [4, 5]]) col_idx = np.array([1, 0]) selected = .... # selects 1st element of row 0 and 0th element of row 1. print selected # np.array([2, 4]) 您可以使用范围进行切片: In [11]: my_matrix[np.arang

我有一个矩阵和一个列索引列表,我想从矩阵中为每一行选择。我在努比怎么做

my_matrix = np.array([[1, 2], [4, 5]])
col_idx = np.array([1, 0])
selected = .... # selects 1st element of row 0 and 0th element of row 1.
print selected
# np.array([2, 4])

您可以使用范围进行切片:

In [11]: my_matrix[np.arange(my_matrix.shape[0]), col_idx]
Out[11]: array([2, 4])
在进行以下选择时非常有用:

>>> np.choose(col_idx, my_matrix.T)
array([2, 4])
在更大的矩阵上:

>>> my_matrix_2 = np.array([[1, 2], [4, 5], [3, 7], [4, 1]])
>>> col_idx_2 = np.array([1, 0, 0, 1])
>>> np.choose(col_idx_2, my_matrix_2.T)
array([2, 4, 3, 1])
该方法返回带有选定值的新数组(不是原始数组的视图)


文档中有更多这种方法的示例(最初有些不明显),但我将使用上面的第二个示例解释发生了什么

我们正在使用
np.choose
从名为
my_matrix_2.T
的选项数组中返回一个新数组,其中
col\u idx_2
指定每次从选项数组中选择哪一行

请注意,我们将
my_matrix_2
转置以使其工作:

# my_matrix_2.T
array([[1, 4, 3, 4],  # row 0
       [2, 5, 7, 1]]) # row 1
我们有
col\u idx\u 2=[1,0,0,1]
。现在,逐个遍历此数组中的一个值:

  • 新数组的第一个元素将是
    my_matrix_2.T
    的行
    1
    的第一个元素。这是
    2

  • 新数组的第二个元素将是
    my_matrix_2.T
    的行
    0
    的第二个元素。这是
    4

  • 新数组的第三个元素将是
    my_matrix_2.T
    的行
    0
    的第三个元素。这是
    3

  • 新数组的第四个元素将是
    my_matrix_2.T
    的行
    1
    的第四个元素。这是
    1


因此,该方法返回
数组([2,4,3,1])

my_matrix[range(col_idx.size),col_idx]
应该完成这项工作。@iluengo:这更像是一个答案,而不是一个注释。
# my_matrix_2.T
array([[1, 4, 3, 4],  # row 0
       [2, 5, 7, 1]]) # row 1