将数组乘以不同的维度

时间:2014-02-27 12:53:22

标签: arrays matlab multidimensional-array octave

我有两个问题。 如何将不同尺寸的数组相乘?

Question 1 Example:

    A1=1,2,3,4,5,6
    A2=1,2,3
    The answer I would like to get would be
    A1*A2 =1,4,9,4,10,18

我在考虑使用repmat,但这是最好的方法吗?

另外

Question 2 Example:
A1=1,2,3,4,5,6,7  (notice the addition of another value the number 7)
A2=1,2,3
The answer I would like to get would be
A1*A2 =1,4,9,4,10,18,7 (notice the addition of another value the number 7)

我正在考虑for循环,但数组的数值非常大,超过500,000个值,需要很长时间才能完成。

有没有办法编写一些适用于这两个问题/示例的matlab /代码?

2 个答案:

答案 0 :(得分:2)

您可以使用mod循环显示较短数组的元素:

result = A1.*A2(mod(0:numel(A1)-1,numel(A2))+1);

或者,如果一个长度是另一个长度的整数倍(第一个示例),您可以reshape较大的向量,以便一个维度与较短的向量匹配,然后使用bsxfun

result = bsxfun(@times, reshape(A1,numel(A2),[]), A2(:));
result = result(:).';

答案 1 :(得分:0)

如果A2'*A1的大小合理,这是一个代数解决方案:

B = spdiags(A2'*A1,0:numel(A2):numel(A1))
result = B(1:numel(A1))