首页 > 解决方案 > Pyspark 中压缩稀疏行方法中的矩阵向​​量乘法

问题描述

谁能帮助我如何在 Pyspark 和 Python 的压缩稀疏行 (CSR) 方法中实现矩阵向量乘法?

y = A * X

其中A以 CSR 格式在三个矩阵中表示ValRowPtr并且Col. 也是X一个向量。

矩阵A是一个稀疏矩阵,它使用三个数组存储在 CSR 中:

Val[N]: 包含非零元素的值

RowPtr[N]: 包含非零元素的行索引范围(RowPtr 中的最后一个元素是 Val 数组的大小)

Col[N]: 包含非零元素的列索引

您可以参考此处此处以了解有关 CSR 矩阵表示的更多信息。

算法如下:

将矩阵(使用压缩稀疏行方法存储)与向量相乘d[N]

for (k = 0; k < N; k = k + 1)
    result[i] = 0;

for (i = 0; i < N; i = i + 1)
{  
    for (k = RowPtr[i]; k < RowPtr[i+1]; k = k + 1)
    {  
        result[i] = result[i] + Val[k]*d[Col[k]];
    }  
}


n = len(dense_matrix)

# res = dense X csr
csr_row = 0 # Current row in CSR matrix
for i in range(n):
start, end = row_ptr[i], row_ptr[i + 1]
for j in range(start, end):
    col, csr_value = col_idx[j], csr_values[j]
    for k in range(n):
    dense_value = dense_matrix[k][csr_row]
    res[k][col] += csr_value * dense_value
csr_row += 1

print res

标签: pythonapache-sparkpysparksparse-matrix

解决方案


推荐阅读