Pyspark中的压缩稀疏行方法中的矩阵矢量乘法

时间:2019-04-21 00:16:42

标签: python apache-spark pyspark sparse-matrix

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

y = A * X

A以CSR格式在三个矩阵ValRowPtrCol中表示。 X也是一个向量。

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

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

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

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

您可以参考herehere来了解有关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

0 个答案:

没有答案