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


...全文
595 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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]
不是数学问题哈

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧