【发布时间】:2023-03-03 02:48:01
【问题描述】:
我有两个矩阵(相同的行和列):一个带有浮点值,它们按另一个矩阵中的索引分组。因此,我想要一个字典或列表,其中包含每个索引的元素总和。 索引始终从 0 开始。
A = np.array([[0.52,0.25,-0.45,0.13],[-0.14,-0.41,0.31,-0.41]])
B = np.array([[1,3,1,2],[3,0,2,2]])
RESULT = {0: -0.41, 1: 0.07, 2: 0.03, 3: 0.11}
我找到了这个解决方案,但我正在寻找一个更快的解决方案。 我正在使用 784 x 300 单元格的矩阵,这个算法需要大约 28 毫秒才能完成。
import numpy as np
def matrix_sum_by_indices(indices,matrix):
a = np.hstack(indices)
b = np.hstack(matrix)
sidx = a.argsort()
split_idx = np.flatnonzero(np.diff(a[sidx])>0)+1
out = np.split(b[sidx], split_idx)
return [sum(x) for x in out]
如果您能帮我找到更好、更简单的解决方案,我将不胜感激!
编辑:我犯了一个错误,在 300*10 矩阵中完成时间约为 8ms,但在 784x300 中完成时间约为 28ms。
EDIT2:我的A 元素是float64,所以bincount 给我ValueError。
【问题讨论】:
-
8 毫秒?我会说这非常快。您在寻找多快?
-
@Bayko 我正在寻找类似 ms 的东西。因为这个过程是在一个 ~6000*100 循环中。
-
您可能正在寻找某种形式的
bincount。
标签: python numpy matrix sum indices