I have two square matrices A
and B
I must convert B
to CSR Format
and determine the product C
A * B_csr = C
I have found a lot of information online regarding CSR Matrix - Vector multiplication. The algorithm is:
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]];
}
}
However, I require Matrix - Matrix
multiplication.
Further, it seems that most algorithms apply A_csr - vector
multiplication where I require A * B_csr
. My solution is to transpose the two matrices before converting then transpose the final product.
Can someone explain how to compute a Matrix - CSR Matrix
product and/or a CSR Matrix - Matrix
product?
Here is a simple solution in Python for the
Dense Matrix X CSR Matrix
. It should be self-explanatory.CSR Matrix X Dense Matrix
is really just a sequence ofCSR Matrix X Vector
product for each row of the dense matrix right? So it should be really easy to extend the code you show above to do this.Moving forward, I suggest you don't code these routines yourself. If you are using C++ (based on the tag), then you could have a look at Boost ublas for example, or Eigen. The APIs may seem a bit cryptic at first but it's really worth it in the long term. First, you gain access to a lot more functionality, which you will probably require in the future. Second these implementations will be better optimised.