python - Pyspark 中压缩稀疏行方法中的矩阵向量乘法
问题描述
谁能帮助我如何在 Pyspark 和 Python 的压缩稀疏行 (CSR) 方法中实现矩阵向量乘法?
y = A * X
其中A
以 CSR 格式在三个矩阵中表示Val
,RowPtr
并且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
解决方案
推荐阅读
- ansible - Ansible 角色 - 无法检测过滤器插件
- javascript - 设置用户代理不适用于 puppeteer / tor 配置
- angular - 具有大型数据集的 Mat Multi Select 中的性能问题
- python-3.x - 如果boundingRect接触线,如何计算车辆数
- mysql - 错误:在 MySQL 中将 Varchar 值更新为 Datetime
- java - 内置的 HashTable 类可以显示上一个和下一个键吗?
- cookies - Cookie 未在浏览器上设置
- html - 将图像粘贴到 div 的底部 - 响应式图像问题(网格/填充)
- discord.js - 让 Rock、Paper、Scissors 在 discord.js 中通过反应工作
- c# - 将多个文本框中的值插入一列,但为每个文本框值创建一个新行