我有两个稀疏矩阵A和B,其中A和B的列数相同(但行数可能不同),我试图得到一个稀疏矩阵C,其元素c_ij = sum_j min(a_ij,b_ji),其中a_ij和b_ij分别是A和B的元素。
这能高效地完成吗?理想情况下是稀疏的吗?即使是密集的也可以,但涉及的矩阵将是巨大的(数万行)并且非常稀疏。
- 详细信息:**类似于标准(数学)矩阵乘法,但不是对元素的乘积求和,而是对元素的最小值求和。
举一个例子,使用标准的矩阵乘法A*B给出元素c_ij = sum_ja_ij * b_ji,其中i和j分别作为行和列索引。
例如,
import numpy as np
from scipy.sparse import csr_matrix
A = csr_matrix([[1, 2, 0],
[0, 0, 3],
[4, 0, 5]])
B = csr_matrix([[2, 0, 0],
[0, 0, 3],
[6, 0, 0]])
C = A * B
print(f"\nC = A * B = \n{C}")
给予
>>>
C = A * B =
(0, 2) 6
(0, 0) 2
(1, 0) 18
(2, 0) 38
其中
c_(31)= 38 = j和(a_(3j)* b_(j1))= 4 * 2 + 0 * 0 + 5 * 6 = 38。
对于C中的每个元素,我需要最小值的和min(a_ij * b_ji),而不是乘积a_ij * b_ji的和:
c_31 =和_j最小(a_3j,b_j1)=最小(4,2)+最小(0,0)+最小(5,6)= 7。
1条答案
按热度按时间6rqinv9w1#
在普通的密集数组中,这在三维数组中会更容易完成,但在稀疏形式中不可用。
其他注意事项:不要使用
_matrix
;它已被弃用,取而代之的是_array
。上面的操作是故意对与你的不同的示例矩阵进行的,因为当所有维度的大小都相同时,不可能可靠地开发数组操作代码。但是,当我将它们修改为与你的原始数组相同时,我得到