我有两个问题。 如何将不同尺寸的数组相乘?
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 /代码?
答案 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))