gpt4 book ai didi

tensorflow - tensorflow 或pytorch中的分区矩阵乘法

转载 作者:行者123 更新时间:2023-12-04 00:52:57 26 4
gpt4 key购买 nike

假设我有大小为 [4, 4] 的矩阵 P将(块)划分为 4 个较小的矩阵 [2,2] .我该怎么办 高效 将此块矩阵乘以另一个矩阵(不是分区矩阵而是更小)?

让我们假设我们的原始矩阵是:

P = [ 1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4]

其中拆分为子矩阵:
P_1 = [1 1    , P_2 = [2 2  , P_3 = [3 3   P_4 = [4 4
1 1] 2 2] 3 3] 4 4]

现在我们的 P 是:
P = [P_1 P_2
P_3 p_4]

在下一步中,我想在 P 和较小的矩阵之间进行元素乘法,其大小等于子矩阵的数量:
P * [ 1 0   =   [P_1  0  = [1 1 0 0 
0 0 ] 0 0] 1 1 0 0
0 0 0 0
0 0 0 0]

最佳答案

您可以考虑以更有效的方式表示大型块矩阵。

例如,块矩阵

P = [ 1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4]

可以用
a = [ 1 0    b = [ 1 1 0 0    p = [ 1 2
1 0 0 0 1 1 ] 3 4 ]
0 1
0 1 ]

作为
P = a @ p @ b

用( @ 表示矩阵乘法)。矩阵 ab表示/编码 P 的块结构和小 p表示每个块的值。

现在,如果你想乘(按元素) p使用小 (2x2) 矩阵 q你只是
a @ (p * q) @ b

一个简单的pytorch示例
In [1]: a = torch.tensor([[1., 0], [1., 0], [0., 1], [0, 1]])
In [2]: b = torch.tensor([[1., 1., 0, 0], [0, 0, 1., 1]])
In [3]: p=torch.tensor([[1., 2.], [3., 4.]])
In [4]: q = torch.tensor([[1., 0], [0., 0]])

In [5]: a @ p @ b

Out[5]:
tensor([[1., 1., 2., 2.],
[1., 1., 2., 2.],
[3., 3., 4., 4.],
[3., 3., 4., 4.]])

In [6]: a @ (p*q) @ b

Out[6]:
tensor([[1., 1., 0., 0.],
[1., 1., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])


我把它留给你作为练习如何有效地产生“结构”矩阵 ab给定块的大小。

关于tensorflow - tensorflow 或pytorch中的分区矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56601115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com