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