matlab 矩阵列减,matlab – 如何从矩阵的每一行中减去一个向量?

Possible Duplicate:

07000

我正在寻找一种优雅的方式从矩阵的每一行中减去相同的向量。这是一种非常优雅的做法。

a = [1 2 3];

b = rand(7,3);

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

c(:,2) = b(:,2) - a(2);

c(:,3) = b(:,3) - a(3);

此外,优雅的方式不能比这种方法慢。

我试过了

c = b-repmat(a,size(b,1),1);

似乎较慢。

编辑:赢家是这种方法。

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

c(:,2) = b(:,2) - a(2);

c(:,3) = b(:,3) - a(3);

编辑:更多的方法,和tic toc结果:

n = 1e6;

m = 3;

iter = 100;

a = rand(1,m);

b = rand(n,m);

tic

c = zeros(size(b));

for i = 1:iter

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

c(:,2) = b(:,2) - a(2);

c(:,3) = b(:,3) - a(3);

end

toc

tic

c = zeros(size(b));

for i = 1:iter

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

c(:,2) = b(:,2) - a(2);

c(:,3) = b(:,3) - a(3);

end

toc

tic

c = zeros(size(b));

for i = 1:iter

for j = 1:3

c(:,j) = b(:,j) - a(j);

end

end

toc

tic

for i = 1:iter

c = b-repmat(a,size(b,1),1);

end

toc

tic

for i = 1:iter

c = bsxfun(@minus,b,a);

end

toc

tic

c = zeros(size(b));

for i = 1:iter

for j = 1:size(b,1)

c(j,:) = b(j,:) - a;

end

end

toc

结果

Elapsed time is 0.622730 seconds.

Elapsed time is 0.627321 seconds.

Elapsed time is 0.713384 seconds.

Elapsed time is 2.621642 seconds.

Elapsed time is 1.323490 seconds.

Elapsed time is 17.269901 seconds.

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值