对于从第二个元素开始的所有元素,计算行向量中每个元素(前一个元素和下一个元素)的平均值 - 向量化实现
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)
但是我想要的是完全矢量化的实现。
那可能吗?有任何想法吗?
真的非常感谢。
我会这样做:
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"够用就够了。
希望对您有所帮助!
我想为从第二个元素开始的所有元素计算每个元素(行向量中的前一个元素和下一个元素)的平均值,并且我想使用矢量化实现来实现。
假设我有这个行向量:
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)
但是我想要的是完全矢量化的实现。
那可能吗?有任何想法吗?
真的非常感谢。
我会这样做:
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"够用就够了。
希望对您有所帮助!