窗口减去不同大小的向量,然后找到结果的平均值

时间:2016-05-09 09:57:29

标签: matlab vector vectorization

美好的一天,

如果可能的话,我有一个问题,即如果没有循环,我想要实现的目标。正如标题所说,我需要对不同大小的矢量进行窗口减法,然后找出结果的平均值。

例如,假设我们有向量a = [2 3 4 5 6]和向量b = [1 2]。 程序将必须移动具有较小数量的元素(在该示例中为向量b)的窗口而不是较大的元素(向量a)并且以该方式进行操作以使其从向量a中的前两个元素开始并且使用向量b进行减法然后求和结果并找到意思。 在这个例子中,它只是计算减法2-1 = 1,3-2 = 1,求和结果1 + 1 = 2并将它们除以2(因为矢量b是那个大小)。最终结果是1。 然后我们在向量a的第二个元素(值3和4,或索引2和3)上移动窗口,并重复处理向量a的最后一个元素。 对于最终结果,我们需要获得由此示例的元素[1 2 3 4]组成的向量c。 这可能没有循环,因为我有超过10k的数据集。提前致谢

1 个答案:

答案 0 :(得分:0)

我只用一个循环即可解决它,迭代通过" b" (在您的示例中有两个循环)。

声明向量(作为列!这是matlabs计算工作所必需的)

a = [2 3 4 5 6]'; 
b = [1 2]';

声明计算结果的矩阵。每列代表" a"中的元素的减法。使用" b"中的一个元素。

c = zeros(length(a)-length(b)+1,length(b));
for k = 1:length(b)
    c(:,k) = a(k:length(a)-length(b)+k)-b(k);
end

现在只需对" c"中的元素求和按行划分并除以" b"得到平均值

result = sum(c,2)/length(b);

您可以根据您的确切示例简化此操作,但这是适用于所有vetors" a"和" b",其中" b"是较小的向量。