对于从第二个元素开始的所有元素,计算行向量中每个元素(前一个元素和下一个元素)的平均值 - 向量化实现

Compute the mean of each element, the previous and the next in a row vector, for all elements starting from the second one - vectorized implementation

我想为从第二个元素开始的所有元素计算每个元素(行向量中的前一个元素和下一个元素)的平均值,并且我想使用矢量化实现来实现。

假设我有这个行向量:

a = [4, 7, 1, 3, 2];

我要获取的是:

b = [4, 3.66, 2, 1.66];

这又是后续三胞胎的平均值:
[4 7 1], [7 1 3], [1 3 2], [3 2 0](零是约定的)。
顺便说一句,两个数字的近似值在这里无关紧要,这只是为了举例。


我想出了这个代码:

a = [4 7 1 3 2];

function shifted = generateShiftedValues(rowVec)
    shifted = rowVec;
    for i=2:3
        shifted(i, :) = [rowVec(1, i:end), zeros(1, i-1)];
    endfor
endfunction

b = mean(generateShiftedValues(a)(:, 1:end-1), 1)

但是我想要的是完全矢量化的实现

那可能吗?有任何想法吗? 真的非常感谢。

Convolution is the key to success.

我会这样做:

a = [4 7 1 3 2]

n = 3;

b = conv(a, ones(n, 1)) / n;
b = b(3:end-1)


a =
   4   7   1   3   2

b =
   4.00000   3.66667   2.00000   1.66667

可以轻松地为要平均的任意数量的任意元素构建一个通用解决方案 "starting point"。如果您需要,可以在您的问题中提供一般描述。如果那个"special case"够用就够了。

希望对您有所帮助!