Numpy 在给定索引列表的情况下,是否可以对矩阵(二维数组)的特定元素求和?

Numpy 在给定索引列表的情况下,是否可以对矩阵(二维数组)的特定元素求和?,numpy,Numpy,经过一些研究,我不能成功地使用Numpy的函数和来解决我的问题。我在这里给出一个非常基本的示例(我所针对的矩阵和索引列表一样庞大,这就是我使用Numpy的原因): 我有一个矩阵 A = np.array([1,2,3,4],[5,6,7,8]) 和索引列表 L = [ 2, 3, 0 ] 我需要从中计算: A[2][3] + A[3][0] 因此,更正式地说,我需要计算列表L中I的A[I][I+1]之和 我需要尽快完成(因此,不允许循环) 致意 Aymeric我能想到的最好方法是使用np重

经过一些研究,我不能成功地使用Numpy的函数和来解决我的问题。我在这里给出一个非常基本的示例(我所针对的矩阵和索引列表一样庞大,这就是我使用Numpy的原因):

我有一个矩阵

A = np.array([1,2,3,4],[5,6,7,8])
和索引列表

L = [ 2, 3, 0 ]
我需要从中计算:

A[2][3] + A[3][0]
因此,更正式地说,我需要计算列表
L
I
A[I][I+1]
之和

我需要尽快完成(因此,不允许循环)

致意


Aymeric

我能想到的最好方法是使用
np重塑
L
。首先重复

L = tuple(np.repeat(L,2)[1:-1].reshape(-1,2).T)
然后,使用这个新的
L
,您可以直接进行求和

np.sum(A[L])
完整的例子

A = np.array([[1,2,3,4],[5,6,7,8]])
L = np.array([1,1,0])

L = tuple(np.repeat(L,2)[1:-1].reshape(-1,2).T)
np.sum(A[L])
一个更大的例子

A = np.random.randint(0,100,size=(929,929))
L = np.random.randint(0,928,size=928)

L = tuple(np.repeat(L,2)[1:-1].reshape(-1,2).T)
np.sum(A[L])

我能想到的最好的方法是使用
np重塑
L
。首先重复

L = tuple(np.repeat(L,2)[1:-1].reshape(-1,2).T)
然后,使用这个新的
L
,您可以直接进行求和

np.sum(A[L])
完整的例子

A = np.array([[1,2,3,4],[5,6,7,8]])
L = np.array([1,1,0])

L = tuple(np.repeat(L,2)[1:-1].reshape(-1,2).T)
np.sum(A[L])
一个更大的例子

A = np.random.randint(0,100,size=(929,929))
L = np.random.randint(0,928,size=928)

L = tuple(np.repeat(L,2)[1:-1].reshape(-1,2).T)
np.sum(A[L])

您好,您的想法很好,它适用于给定的示例,但当我使用更大的矩阵时,它不起作用。len(L)=928,A.shape(929,929),错误表示Indexer罗:arrayOk的索引太多了,我想我可能不得不使用数组而不是元组L@ailauli69很抱歉,我忘了在我的原始答案中转置索引,请查看我更新的帖子,也许这一次它符合接受答案的条件(不是以前的答案)。您好,你的想法是好的,它适用于你给出的例子,但当我使用更大的矩阵时,它不起作用。len(L)=928,A.shape(929,929),错误表示Indexer罗:arrayOk的索引太多了,我想我可能不得不使用数组而不是元组L@ailauli69很抱歉,我忘了在我的原始答案中转置索引,请查看我更新的帖子,也许这一次它可以作为一个被接受的答案(不是上一个)。如果
A
是(2,4)形状,
A[2]
将产生错误!如果
A
是(2,4)形状,
A[2]
将产生错误!