基于boost::multi_array的矩阵相乘

richbirdandy 2008-09-09 03:07:35
看了半天文档,才发现可以用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[] = {
0, 1, 2,
3, 4, 5
};
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;
}


...全文
207 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2008-09-09
up一下,还没开始用boost这个东西呢
回复
wudeshou82666 2008-09-09
是数学问题啊,up
回复
wangdeqie 2008-09-09
是数学问题啊,up
回复
richbirdandy 2008-09-09
睡了 boost有矩阵库啊 囧。。。
回复
richbirdandy 2008-09-09
[Quote=引用 2 楼 wangdeqie 的回复:]
是数学问题啊,up
[/Quote]
不是数学问题哈
回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告