【问题标题】:Matlab vector operation (vector + vector (by element))Matlab向量运算(向量+向量(按元素))
【发布时间】:2013-10-04 22:26:45
【问题描述】:

我知道在 Matlab 中您可以使用“不错”的矢量运算,例如 A*BA.*B

如果你有

A=[2, 2];
B=[3, 1];

这是逻辑,你不能使用A*B。您可以使用A.*B 什么是A[1]*B[1], A[2]*B[2],结果是[6, 2]

在我正在编写的许多“脚本”中,我经常需要使用一些东西,这会导致:

[6, 6; 
2, 2]

所以基本上我需要使用forcycle(类似:):

C=zeros(2,2);
for i=1:size(A,1)
  C(i,:)=A*B(i);
end

我想问一下,如何(如果可能的话)在没有 forcycles 的情况下重写它?是否可以? 这 2 个元素的 2 个向量可能不利于理解我需要什么。 再举一个例子:

A=[1,2,3,4,5]
B=[2,4]

结果:

[2,4,6,8,10;
4,8,12,16,20]

简而言之,例如:
C(1:end --> 取整个向量 A 并乘以 B 中的第一个元素,并将其保存在矩阵中的第一行,其中包含 A 列和 B 行..
--> 取整个向量 A 并乘以 B 中的 SECOND 元素,并将其保存在矩阵的第二行中,其中包含 A 列和 B 行..
--> 取整个向量 A 并将其乘以 B 中的第三个元素,并将其保存在矩阵中的第三行中,其中包含 A 列和 B 行..
--> ...
--> 取整个向量 A 并乘以 B 中的最后一个元素,并将其保存在矩阵中的最后一行,其中包含 A 列和 B 行..

【问题讨论】:

    标签: matlab vector operation


    【解决方案1】:

    您可以为此目的使用bsxfun

    P = bsxfun(@times,A,B')
    

    这给了

    A =  1     2     3     4     5
    B =  2     4
    
    
    P =  2     4     6     8    10
         4     8    12    16    20
    

    【讨论】:

    • 将尝试..thanks..bsxfun 函数是我真的不明白的东西,我认为会有一个解决方案..尝试一下..thanks
    • 正是我需要做的......就像一个魅力......非常感谢你......你能告诉我更多......你有一些bsx功能好的链接吗?解释说我也许可以尝试理解他们?再次非常感谢你。找到答案..
    • 要理解这样的功能,您可能需要玩玩具示例。这里,bsxfun 使用 B 的列向量 (B'),一次取一个元素(B 的第一个,然后是第二个),并为每个元素应用times 函数(A 乘以 B 的一个值) .
    • 记得使用.',而不是'。向量可能很复杂!
    【解决方案2】:

    另一种解决方案是使用矩阵乘法:

    [ones(size(B))'*A].*[B'*ones(size(A))]
    

    【讨论】:

    • 很好的解决方案。但我认为我们都可以同意,bsxfun 是一个更好的解决方案(至少写它:D)..这个替代方案有一些优势吗?例如更好的计算时间或更好的内存性能?
    • 我同意,bsxfun 可能在简洁和速度方面都更好。这个解决方案对我们中的一些人有吸引力的唯一原因是它直观且可读。它只是将 [2x1] 列向量与 [1x5] 行向量相乘以获得 [2x5] 矩阵等...
    • 是的,因为“我们中的一些人”说得很好:D 因为当我试图完全根据我的问题重写它时,我仍然得到一个内部矩阵尺寸错误..:D..但无论如何谢谢你也非常好..去尝试玩那个..我想至少明白这一点..:] 非常感谢
    • 得到了它..被另一个元素反转:]..好吧,我想我明白了..谢谢你们两个。我想我会在下一次编码中多次使用其中一种可能性。它对我有很大帮助
    • 记得使用.',而不是'。向量可能很复杂!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2013-05-26
    • 2013-04-17
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多