首页 > 解决方案 > 计算从第二个向量化实现开始的所有元素的每个元素的平均值,即行向量中的前一个和下一个元素

问题描述

对于从第二个元素开始的所有元素,我想计算每个元素的平均值,即行向量中的前一个和下一个元素,并且我想用一个向量化的实现来做到这一点。

假设我有这个行向量:

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)

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

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

标签: octave

解决方案


卷积是成功的关键。

我会这样做:

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

人们可以轻松地为要平均的任意数量的元素和任意“起点”构建通用解决方案。如果您需要这样,也许在您的问题中提供一般描述。如果那个“特殊情况”就足够了,那就够了。

希望有帮助!


推荐阅读