基于boost::multi_array的矩阵相乘

基于boost::multi_array的矩阵相乘

博客第一篇,还望大家多多指点。

看了半天的boost::multi_array文档,才发现可以用shape()[]这个的东西,来取某一维的长度

而关于视图部分,小弟看的一知半解,
比如,怎么样把一个4×4的矩阵分成4个2×2的矩阵呢
虽然可以用别的途径解决,但还是想看下multi_array的视图操作

本来要实现下Strassen算法的,
下面是普通的矩阵乘法。

#include  < iostream >
#include 
" boost/multi_array.hpp "
using   namespace  std;

typedef boost::multi_array
< int 2 >  matrix; 

matrix matrix_multiply(matrix
&  a,matrix &  b)
{
    matrix::index row
=a.shape()[0];
    matrix::index col
=b.shape()[1];
    matrix c(boost::extents[row][col]);

    
for (matrix::index i=0; i!=a.shape()[0]; ++i)
        
for (matrix::index j=0; j!=b.shape()[1]; ++j)
            
for (matrix::index k=0; k!=a.shape()[1]; ++k)
                c[i][j]
+=a[i][k]*b[k][j];

    
return c;
}


void  print( const  matrix &  m)
{
    
for (matrix::index i=0; i!=m.shape()[0]; cout<<endl,++i)
        
for (matrix::index j=0; j!=m.shape()[1]; ++j)
                cout
<<m[i][j]<<" ";    
}


int  main()  {   

    
int values[] = {   
        
012,   
        
345    
    }
;   
    
const int values_size = 6;   
    matrix A(boost::extents[
2][3]);  
    matrix B(boost::extents[
3][2]); 
    A.assign(values,values 
+ values_size);
    B.assign(values,values 
+ values_size);

        cout
<<"matrix A"<<endl;
        print(A);   
    cout
<<endl;cout<<"*"<<endl;cout<<"matrix B"<<endl;
        print(B);   
    cout
<<endl;cout<<"="<<endl;cout<<"matrix C"<<endl;
    print(matrix_multiply(A,B));
    cout
<<endl;  

    
return 0;
}
 

你可能感兴趣的:(基于boost::multi_array的矩阵相乘)