Matlab:将向量加到矩阵中

6

我有一个表示3D坐标列表的3XN矩阵,类似于:

33    33    33    33    34    34    34    34    34    35    35
17    18    19    20    16    17    18    19    20    16    17
10    10    10    10    10    10    10    10    10    10    10 

我希望将所有坐标移动某个向量 v=[1 2 3],即将这个三维向量加到矩阵的每一列中。

我知道可以使用 for 循环实现,但有没有不用循环的方法?肯定有办法...

2个回答

10

你的意思是像这样吗?

D=[33    33    33    33    34    34    34    34    34    35    35;
17    18    19    20    16    17    18    19    20    16    17;
10    10    10    10    10    10    10    10    10    10    10 ];

A=[1 2 3]';

C= bsxfun(@plus, D, A)

C =

    34    34    34    34    35    35    35    35    35    36    36
    19    20    21    22    18    19    20    21    22    18    19
    13    13    13    13    13    13    13    13    13    13    13

1

使用repmat函数:

M = randn(3, N);           % your 3 x N matrix
v = randn(3, 1);           % your vector
r = M + repmat(v, [1 N]);  % add v to every column of M

我认为Nasser的答案更好 - 我认为在这里你会从v中创建第二个矩阵,如果N非常大,那么会占用很多空间,而他的答案不会占用任何额外的空间。我有什么遗漏吗? - olamundo
2
不,你可能是对的。我偏爱我的解决方案,因为我已经使用它很多次了 :) 除非N非常大,你的计算机非常慢,或者你重复执行这个操作很多次,否则性能差异可能可以忽略不计。如果性能不是问题,那么我认为使用repmat可能会导致稍微更易读和可维护的代码。但这只是一个观点。两种解决方案都可以工作 :) - dantswain
2
值得注意的是,repmat非常慢,如果N很大,那么您的解决方案可能会使用更多的内存。此外,bsxfun将更好地与任何可用的多线程一起工作,例如通过PCT。 - Nzbuu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接