在 MATLAB 中对“收缩”标量积进行向量化

问题描述 投票:0回答:1

假设在 MATLAB 中给我一个长度为

psi
的行向量
P
和一个长度为
q
的行向量
M
。在这里,
M>P
。我想用以下方式组装
G

for j = 1:M
        G(j) = q(j:min(j+P-1, M))*psi(1:min(M-j+1, P))';
end

对于大的

M
P
来说,这是非常耗时的。对
q
的大小和
psi
变大
j
也很敏感。

由于 j 移动,我无法对此进行矢量化。当然,可以将其写为矩阵向量乘法,其中

psi
为向量,但组装正确的矩阵对我来说几乎同样昂贵。

我感谢任何形式的帮助。

matlab for-loop matrix vectorization
1个回答
0
投票

这是互相关。您可以使用

xcorr
然后修剪结果,或填充并让
filter2
为您完成工作。我选择使用
filter2

由于您只需要前面的有效值以及末尾的所有值,因此您确实需要用

q
零填充
P - 1
的末尾。

qp = [q zeros(1, P-1)];
G_filt = filter2(psi, qp, 'valid');

G_filt =
 Columns 1 through 16:
   140   168   196   224   252   280   308   336   364   392   420   448   476   504   385   280
 Columns 17 through 20:
   190   116    59    20

您的示例的结果:

G =
 Columns 1 through 16:
   140   168   196   224   252   280   308   336   364   392   420   448   476   504   385   280
 Columns 17 through 20:
   190   116    59    20
© www.soinside.com 2019 - 2024. All rights reserved.