矩阵乘法

#include<iostream>
#include<iomanip>//setw(n)
#include<valarray>
using namespace std;


template<class T>
void printMatrix(const valarray<T>& a,size_t row,size_t col)
{
size_t siz=row*col;
for(size_t i=0;i<siz;++i)
{
cout<<setw(5)<<a[i];
cout<<((i+1)%col?' ':'\n');

cout<<endl;
}


template<class T>
valarray<T> matmult(const valarray<T>& a,size_t arows,size_t acols,
           const valarray<T>& b,size_t brows,size_t bcols)
{
valarray<T> result(arows*bcols);//a的行数 b的列数
for(size_t i=0;i<arows;++i)
{
valarray<T> row=a[slice(acols*i,acols,1)];//取a中一行数
for(size_t j=0;j<bcols;++j)
{
valarray<T> col=b[slice(j,brows,bcols)];//取b中一列数
result[i*bcols+j]=(row*col).sum();//得出计算结果sum(x,2)表示矩阵x的横向相加,求每行的和,结果是列向量。[j*bcols+i] 
}                                  //而缺省的sum(x)就是竖向相加,求每列的和,结果是行向量。[i*bcols+j]
}
return result;
}


void main()
{
const int N=100;
int i,j,a[N],b[N],w,x,y,z;
cout<<"a矩阵的行与列:";
cin>>w>>z;
cout<<"a矩阵:";
for(i=0;i<w*z;i++)
cin>>a[i];
cout<<"b矩阵的行与列:";
cin>>x>>y;
cout<<"b矩阵:";
for(j=0;j<x*y;j++)
cin>>b[j];
valarray<int> c(a,w*z);
valarray<int> d(b,x*y);
cout<<"a与b矩阵相乘"<<endl;
valarray<int> e(matmult(c,w,z,d,x,y));
printMatrix(e,w,y);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值