如何计算两个大矩阵的numpy.dot()乘积而不计算结果矩阵的一部分?

时间:2017-10-29 20:21:55

标签: python numpy scipy sparse-matrix

假设我们有两个矩阵a = [[1,2] [3,4]],b = [[5,6] [7,8]](在我的例子中它们非常大)。使用numpy.dot(a,b),我们可以得到res = [[19,22],[43,50]]的结果。如果在结果中,我们只需要部分元素,即[[19,NA],[NA,50]],我们不关心22或43.我怎么能实现这样的numpy dot产品知道哪个我想要的结果矩阵的一部分(在我的例子中它是mask = [[1,0] [0,1]])?

实际结果掩码是随机csr_matrix。

通常,我们有两个大矩阵A(大小:M x N)和B(大小:N x P)。在numpy.dot()结果中,我们只关心掩码M中的1个元素(大小:M x P)。因此,我们希望通过跳过掩码中的那些元素来提高性能。

1 个答案:

答案 0 :(得分:0)

使用numpy masked arrays,然后使用通常的numpy dot产品:

import numpy.ma as ma
a = ma.array([[1, 2],[3, 4]], mask=[[0,1],[1,0]])
b = ma.array([[5, 6],[7, 8]], mask=[[0,1],[1,0]])  

np.dot(a,b)


masked_array(data =
 [[19 --]
 [-- 50]],
             mask =
 [[False  True]
 [ True False]],
       fill_value = 999999)