【发布时间】:2016-10-01 03:52:50
【问题描述】:
位数组之间的普通矩阵乘积:
1, 0, 0
Matrix A = 1, 1, 1
0, 0, 1
1, 1, 0
Transpose of A = 0, 1, 0
0, 1, 1
C = Matrix A times (Transpose of Matrix A)
1, 1, 0
C = 1, 3, 1
0, 1, 1
A 是 1 和 0 的位数组。实际矩阵 A 很大,大约有 0.25% 的 1 项和 99.75% 的零项。
C 是一个整数数组。
如何在不占用大量内存的情况下快速计算?
目前,我正在使用 scipy 的稀疏矩阵乘法例程来处理 python 中浮点 1.0 和 0.0 的压缩稀疏行矩阵。我也在尝试直接调用 mkl 库中的 c 函数来减少内存使用。
【问题讨论】:
-
多大? 1000 x 1000 矩阵需要多长时间?
-
计算一个 750,000 x b 矩阵与其转置的乘积。 b 至少为 10,000。 b 越大越好。但是每个 cpu 核心的内存是有限的。
-
对不起,我的意思是一个形状为 b x 750,000 的矩阵 A。所以 A 的 A 次转置应该是 b x b 的形状。
-
@rxu 给出 750000 和 0.25%,你的 C 有 99% 的非零元素。您可能希望以密集格式存储它。
-
这取决于 b 行是否倾向于在同一列有 1。
标签: python scipy bit-manipulation intel-mkl