声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 904|回复: 9

[编程技巧] 如何将下述过程矢量化?

[复制链接]
发表于 2008-5-8 08:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我在编程时,遇到以下问题,
比如 矩阵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

谢谢大家!
回复
分享到:

使用道具 举报

发表于 2008-5-8 08:39 | 显示全部楼层
原帖由 lilongduzhi 于 2008-5-8 08:32 发表
我在编程时,遇到以下问题,
比如 矩阵A为一大型矩阵,B为与A相同行数的列向量;我想用A中的各列减去B向量:
即:
a =
     1     2     3
     4     5     6
     7     8     9
b =
     1
     1
     ...


这样理解不知道对不对?
c=a-[b b b]
 楼主| 发表于 2008-5-8 08:53 | 显示全部楼层
主要是考虑a的列数比较大,在复制b矩阵就要消耗很大内存?是么?
发表于 2008-5-8 09:10 | 显示全部楼层
原帖由 lilongduzhi 于 2008-5-8 08:53 发表
主要是考虑a的列数比较大,在复制b矩阵就要消耗很大内存?是么?


那用循环呢?
for i=1:length(a)
c(:,i)=a(:,i)-b;
end
c
 楼主| 发表于 2008-5-8 09:24 | 显示全部楼层
用哪个方案执行效率比较高,谢谢ch_j1985

[ 本帖最后由 eight 于 2008-5-8 11:17 编辑 ]
发表于 2008-5-8 09:29 | 显示全部楼层
原帖由 lilongduzhi 于 2008-5-8 09:24 发表
那那个方案执行效率比较高,谢谢ch_j1985

自己试试。
发表于 2008-5-8 09:29 | 显示全部楼层
原帖由 lilongduzhi 于 2008-5-8 09:24 发表
那那个方案执行效率比较高,谢谢ch_j1985


关于这个问题你可以看看这个帖子:
http://www.chinavib.com/forum/thread-44968-1-1.html
如果权限不够,请移步新手上路
发表于 2008-5-8 09:59 | 显示全部楼层

回复 3楼 的帖子

c=a-repmat(b,1,length(a(1,:)));

评分

1

查看全部评分

发表于 2008-5-8 11:41 | 显示全部楼层
原帖由 wwbeyondww 于 2008-5-8 09:59 发表
c=a-repmat(b,1,length(a(1,:)));
估计这是最简便的方法,当然,如果b的各行值都相同,直接a-b(1)就可以了

评分

1

查看全部评分

 楼主| 发表于 2008-5-8 17:30 | 显示全部楼层

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))
但效率其实极度的低,还不如自定义函数完成。
同时 采用动态矩阵的效率也非常低,应才开始预先声明矩阵的维数;
谢谢大家的帮助!

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-16 02:29 , Processed in 0.108537 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表