阿二的梦想船

 

基于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
<int2> 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;
}
 

posted on 2008-09-09 20:21 阿二 阅读(952) 评论(1)  编辑 收藏 引用 所属分类: boost

评论

# re: 基于boost::multi_array的矩阵相乘 2010-04-03 07:40 似懂非懂是否

能实现吗  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜