如何将下述过程矢量化?
我在编程时,遇到以下问题,比如 矩阵A为一大型矩阵,B为与A相同行数的列向量;我想用A中的各列减去B向量:
即:
a =
1 2 3
4 5 6
7 8 9
b =
1
1
1
得出:
c=0 1 2
3 4 5
6 7 8
谢谢大家! 原帖由 lilongduzhi 于 2008-5-8 08:32 发表 http://www.chinavib.com/forum/images/common/back.gif
我在编程时,遇到以下问题,
比如 矩阵A为一大型矩阵,B为与A相同行数的列向量;我想用A中的各列减去B向量:
即:
a =
1 2 3
4 5 6
7 8 9
b =
1
1
...
这样理解不知道对不对?
c=a- 主要是考虑a的列数比较大,在复制b矩阵就要消耗很大内存?是么? 原帖由 lilongduzhi 于 2008-5-8 08:53 发表 http://www.chinavib.com/forum/images/common/back.gif
主要是考虑a的列数比较大,在复制b矩阵就要消耗很大内存?是么?
那用循环呢?
for i=1:length(a)
c(:,i)=a(:,i)-b;
end
c
用哪个方案执行效率比较高,谢谢ch_j1985
[ 本帖最后由 eight 于 2008-5-8 11:17 编辑 ] 原帖由 lilongduzhi 于 2008-5-8 09:24 发表 http://www.chinavib.com/forum/images/common/back.gif
那那个方案执行效率比较高,谢谢ch_j1985
自己试试。 原帖由 lilongduzhi 于 2008-5-8 09:24 发表 http://www.chinavib.com/forum/images/common/back.gif
那那个方案执行效率比较高,谢谢ch_j1985
关于这个问题你可以看看这个帖子:
http://www.chinavib.com/forum/thread-44968-1-1.html
如果权限不够,请移步新手上路
回复 3楼 的帖子
c=a-repmat(b,1,length(a(1,:))); 原帖由 wwbeyondww 于 2008-5-8 09:59 发表 http://www.chinavib.com/forum/images/common/back.gifc=a-repmat(b,1,length(a(1,:))); 估计这是最简便的方法,当然,如果b的各行值都相同,直接a-b(1)就可以了
profile 的效率分析结果
我尝试使用profile进行代码效率分析:结果显示数据量大时,使用c=a-repmat(b,1,length(a(1,:))); 方法效率要高的profile on
a = ones(100,10000);
b= ones(100,1);
for ii =1:100
c=a-repmat(b,1,length(a(1,:)));
d=op(a,b);
end
profile report
%%%%%%%%%
function d= op(a,b)
for i = 1:length(a(1,:))
d = a(:,i)-b;
end;
%%%%%%%%
同时我还测试一些函数的性能,比如我想把二进制数转为十进制(遗传算法中的解码函数),
考虑到matlab的自有函数的效率高因此,使用:
bin2dec( num2str(bin))
但效率其实极度的低,还不如自定义函数完成。
同时 采用动态矩阵的效率也非常低,应才开始预先声明矩阵的维数;
谢谢大家的帮助!
页:
[1]