如何在不计算结果矩阵的部分的情况下计算两个大矩阵的numpy.dot()乘积?

2024-05-04 17:08:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

实际结果掩码是一个随机的csr_矩阵。在

一般来说,我们有两个大矩阵A(大小:mxn)和B(大小:nxp)。在纽比.dot()结果,我们只关心掩码M中为1的元素(大小:M x P)。所以我们希望通过跳过掩码中0的元素来提高性能。在


Tags: numpy元素示例情况res矩阵maskdot
1条回答
网友
1楼 · 发布于 2024-05-04 17:08:31

使用numpy masked arrays,然后使用通常的numpy点积:

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)

相关问题 更多 >