【发布时间】:2018-08-21 09:02:43
【问题描述】:
假设我们有一个矩阵和一个索引列表:
adj_mat = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
indexes = [0,2]
我想要的是对我们通过索引列表的行和列的交集得到的子矩阵对应的行和列求和。在这种情况下,它将是:
sub_matrix = ([[1,3]
[7,9]])
result_rows = [4,16]
result_columns = [8,12]
但是,我多次使用相同的原始矩阵和不同的索引列表进行此计算,因此我正在寻找一种有效的解决方案,而无需每次迭代都创建子矩阵。到目前为止,我的解决方案是(以及分别用于列):
def sum_rows(matrix, indexes):
sum_r = [0]*len(indexes)
for i in range(len(indexes)):
for j in indexes:
sum_r[i] += matrix.item(indexes[i], j)
return sum_r
我正在寻找一种更有效的算法,因为我记得有一种方法看起来像这样,可以对索引中的所有行(或列?)求和:
matrix.sum(:, indexes)
matrix.sum(indexes, indexes)
我假设我需要的是第二行,如果它存在的话。我尝试用谷歌搜索它,无论有没有 numpy,但找不到正确的语法。
是否有我在此处描述的解决方案,但我只是使用了错误的语法?或者有什么其他的改进建议?
【问题讨论】:
-
我不明白函数
f采用adj_mat和indexes产生sub_matrix。你如何从[[1,2,3],[4,5,6],[7,8,9]]得到[[1, 6], [7, 9]]?[1, 3]也不是 3 x 3 矩阵的索引。你的意思是[0, 2]? -
是的,我只是做了一个类似人类的例子,而不是来自编码。谢谢