我想在 Matlab 中计算向量的加权最大值。对于加权最大值,我打算如下:
2*N+1给定一个权重向量W={w[-N], w[-N+1] .. w[0] .. w[N]}和一个输入序列A,加权最大值是一个向量  M,其中  m[i]=max(w[-N]*a[i-N], w[-N+1]*a[i-N+1], ... w[N]*a[i+N]) 
因此,例如给定一个向量A= [1, 4, 12, 2, 4]和权重W=[0.5, 1, 0.5],加权最大值将是M=[2, 6, 12, 6, 4]。
这可以使用 来完成ordfilt2,但ordfilt2使用权重作为加法而不是乘法。
我实际上正在研究 4D 矩阵,但任何 1D 解决方案都可以工作,因为 4D 权重矩阵是可分离的。
我目前的解决方案是生成输入数组的移位副本,A根据移位对它们进行加权并最大化所有数组。Shift 是使用circshift并且是过程中的瓶颈来执行的。事实证明,通过索引“手动”生成移位矩阵甚至更慢。
您能提出任何更有效的解决方案吗?
编辑:对于一个积极的 A,M=exp(ordfilt2(log(A), length(W), ones(size(W)), log(W)))  可以完成这项工作,但仍然需要比上述circshift解决方案更长的时间。我仍在寻找更有效的解决方案。