第一个向量(M)有96个元素,第二个向量(L)有24个。第一个是每15mn个信息,第二个是每小时的信息。 我想要的是将M中的前四个元素与L中的第一个元素相乘,最后只得到一个含有96个元素的向量,就像这样 -
有没有一种简单的方法可以做到这一点,而不会使代码过于复杂?
答案 0 :(得分:6)
您正在寻找broadcasting
,所以让bsxfun
帮助您 -
reshape(bsxfun(@times,reshape(M,4,[]),L(:).'),1,[])
答案 1 :(得分:4)
使用return
函数可以轻松生成kron
的索引,它会创建[1,1,1,1,2,2,2,2 ....]
L
如果你无法理解L(kron(1:numel(L),ones(1,4))).*M
,使用ceil可以实现同样的目的:
kron
答案 2 :(得分:0)
你可以重塑阵列,
a = [2,4,6,8];
b = 1:16;
c = repmat(a,4,1);
d = reshape(a,1,4*length(a));
e = b.*d;
请注意,如果您需要oneliner,可以将这些组合起来
b.*reshape(repmat(a,4,1), 1, 4*length(a));
我不能说这是否比其他选项更快,但它不应该是一个非常大的差异。如果您认为它更全面,请选择此项。