Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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 numpy索引多维数组_Python_Numpy - Fatal编程技术网

Python numpy索引多维数组

Python numpy索引多维数组,python,numpy,Python,Numpy,对于y的每一行,我想得到其索引在m中指定的元素 >>> y = np.arange(15).reshape(3,5) [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] >>> m = np.array([[0, 1], [1, 2], [2, 3]]) 预期输出: [[0, 1] [6, 7] [12, 13]] 针对循环的解决方案 >>> np.stack([y[i, c

对于
y
的每一行,我想得到其索引在
m
中指定的元素

>>> y = np.arange(15).reshape(3,5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

>>> m = np.array([[0, 1], [1, 2], [2, 3]])
预期输出:

[[0, 1]
 [6, 7]
 [12, 13]]
针对循环的
解决方案

>>> np.stack([y[i, cols] for i, cols in enumerate(m)])

有没有一种方法可以在没有
for
循环的情况下执行此操作?

使用一个数组中的值作为另一个数组的索引被称为“花式索引”,但是索引操作将对所有行重复:

y = numpy.arange(15).reshape(3,5)
y[:, [0, 2, 3]]
# array([[ 0,  2,  3],
#        [ 5,  7,  8],
#        [10, 12, 13]])
如果要单独“每行使用一个索引值”,则需要将该行与索引的关系作为另一个索引:

y[[0, 1, 2], [0, 2, 3]]
# array([ 0,  7, 13])
由于索引数组
m
是二维的,因此需要告诉NumPy
m
中这两个维度中的哪一个对应于行索引。您可以通过向升序索引添加另一个空轴(关键字:广播)来实现这一点,然后

y = numpy.arange(15).reshape(3,5)
m = numpy.array([[0, 1], [1, 2], [2, 3]])

y[numpy.arange(len(m))[:, None], m]
# array([[ 0,  1],
#        [ 6,  7],
#        [12, 13]])

有一行,虽然没有比您自己使用for循环的方案好多少:

y[..., m][np.identity(3, dtype=bool)]
虽然它会给你一些关于numpy索引的见解