Python 用于选择二维阵列元素的矢量化代码

Python 用于选择二维阵列元素的矢量化代码,python,arrays,numpy,Python,Arrays,Numpy,下面的代码显然返回矩阵中位置ind的元素: def select_coord(a,ind): return a[ind] 然而,我不知道如何将其矢量化。换言之: b=np.asarray([[2,3,4,5],[7,6,8,10]]) indices=np.asarray([2,3]) select_coord(b,indices) 应返回[4,10] 可以使用for循环写入: def new_select_record(a,indices): ret=[] for

下面的代码显然返回矩阵中位置
ind
的元素:

def select_coord(a,ind):
    return a[ind]
然而,我不知道如何将其矢量化。换言之:

b=np.asarray([[2,3,4,5],[7,6,8,10]])
indices=np.asarray([2,3])
select_coord(b,indices)
应返回
[4,10]

可以使用for循环写入:

def new_select_record(a,indices):
    ret=[]
    for i in range a.shape[0]:
        ret.append(a[indices[i]])
    return np.asarray(ret)

有没有一种方法可以用矢量化的方式来写呢?

如何:
np.diag(b[:,[2,3]])
?获得
b[0,2]
b[1,3]

>>> import numpy as np
>>> b = np.array([[2,3,4,5], [7,6,8,10]])
>>> indices = np.array([2, 3])
>>> b[np.arange(len(indices)), indices]
array([ 4, 10])

谢谢。我怎样才能把它们改好呢?非常感谢。但是“:”和
arange
之间有什么区别呢?这就是创造奇迹的东西吗?@Naji,
numpy.arange(3)
给你
数组([0,1,2])
。我不知道询问
有什么意义。我想象np.arange(2)和传递“:”在第一维度上没有区别,但是我的返回一个(2,2)形数组,而你的返回一个(1,2)形数组,这是你想要的。(我的意思是在你的代码中用b[:,索引]替换第四行。@Naji,
b[:,[2,3]]
给你
[b[0,2],b[0,3]],[b[1,2],b[1,3]],…
.oops!我的错误+道歉。