使用对的矩阵乘法
我正在研究进行矩阵乘法的替代方法。我没有将矩阵存储为二维数组,而是使用向量来
vector<pair<pair<int,int >,int > >
存储矩阵。我的对 (pair) 中的对存储我的索引 (i,j),另一个 int 存储给定 (i,j) 对的值。我想我可能会幸运地以这种方式实现我的稀疏数组。
问题是当我尝试将该矩阵与其自身相乘时。
如果这是一个二维数组实现,我会按如下方式乘以矩阵:
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
C[i][j] = 0;
for(k=0; k<col2; k++)
C[i][j] += A[i][j] * A[j][k];
}
}
有人可以指出一种使用我的“对对”向量实现相同结果的方法吗?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
到目前为止,您可以在一个位置存储一个值。如果要在矩阵中存储多个非零条目,则需要在更大的结构中添加更多对。
map, int>
将是下一个逻辑步骤。现在您可以迭代行,因为first
坐标在map
的排序顺序中更重要。要迭代列,请颠倒该优先级:
要将 A 乘以 B,请转置 B 并迭代 A 和 B,将不太重要的坐标匹配的任何元素相乘,因为顺序自然允许您逐行和逐列进行-柱子。
转置 B:
So far you can store one value at one location. If you want to store several nonzero entries in the matrix, you will need more pairs of pairs in a larger structure.
map<pair<int, int>, int>
would be the next logical step. Now you can iterate over rows because thefirst
coordinate is more significant in themap
's sorting order.To iterate over columns, reverse that precedence:
To multiply A by B, transpose B and iterate over A and B, multiplying any elements whose less-significant coordinates match, as the ordering naturally lets you go line-by-line and column-by-column.
To transpose B: