【发布时间】:2019-08-24 02:35:57
【问题描述】:
我有一个 [n x n] 矩阵,其中包含属于不同组的值,以及一个 [1 x n] 向量定义每个元素所属的组。 (n 通常 ~1E4,在本例中 n=4)
我想计算一个将属于同一组的所有元素相加得到的矩阵。
我使用 np.where() 来计算每个组的元素所在的索引。 当我使用计算的索引时,我没有获得预期的元素,因为我选择了位置对而不是范围(我习惯于 Matlab,在这里我可以简单地选择 M(idx1,idx2) )。
import numpy as np
n=4
M = np.random.rand(n,n)
print(M)
# This vector defines to which group each element belong
belongToGroup = np.array([0, 1, 0, 2])
nGroups=np.max(belongToGroup);
# Calculate a matrix obtained by summing elements belonging to the same group
M_sum = np.zeros((nGroups+1,nGroups+1))
for g1 in range(nGroups+1):
idxG1 = np.where(belongToGroup==g1)
for g2 in range(nGroups+1):
idxG2 = np.where(belongToGroup==g2)
print('g1 = ' + str(g1))
print('g2 = ' + str(g2))
print(idxG1[0])
print(idxG2[0])
print(M[idxG1[0],idxG2[0]])
print(np.sum(M[idxG1[0],idxG2[0]]))
M_sum[g1,g2]=np.sum(M[idxG1[0],idxG2[0]])
print('')
print('Example of the problem:')
print('Elements I would like to sum to obtain M_sum[0,0]')
print(M[0:2,0:2])
print('Elements that are summed instead')
print(M[[0,1],[0,1]])
问题示例: 在上面的示例中,元素 M_sum[0,0] 应该是 M[0,0]、M[0,1]、M[1,0] 和 M[1,1] 的总和 相反,它被计算为 M[0,0] 和 M[1,1] 的总和
【问题讨论】:
标签: python arrays numpy matrix indices