【问题标题】:Averaging every n elements of a vector in matlab在matlab中平均一个向量的每n个元素
【发布时间】:2012-10-22 14:45:27
【问题描述】:

我想在 Matlab 中对向量的每 3 个值进行平均,然后将平均值分配给产生它的元素。

例子:

x=[1:12];
y=%The averaging operation;

手术后,

y=
[2 2 2 5 5 5 8 8 8 11 11 11]

因此生成的向量大小相同,每 3 个值的跳跃平均值替换用于生成平均值的值(即 1 2 3 替换为三个值的平均值,2 2 2)。有没有办法在没有循环的情况下做到这一点?

我希望这是有道理的。

谢谢。

【问题讨论】:

    标签: matlab vector average


    【解决方案1】:

    我会走这条路:

    重塑向量,使其成为 3×x 矩阵:

    x=[1:12];
    xx=reshape(x,3,[]);
    % xx is now [1 4 7 10; 2 5 8 11; 3 6 9 12]
    

    之后

    yy = sum(xx,1)./size(xx,1)
    

    现在

    y = reshape(repmat(yy, size(xx,1),1),1,[])
    

    产生你想要的结果。

    您的参数3,表示值的数量,仅在一个地方使用,如果需要可以轻松修改。

    【讨论】:

    • 谢谢,太好了!只是一个跟进。如果你重塑矩阵,但向量的大小不能被 3 整除,那么矩阵将如何重塑?
    【解决方案2】:

    您可以使用以下方法找到每个三重奏的平均值:

    x = 1:12;
    m = mean(reshape(x, 3, []));

    要复制均值并重塑以匹配原始向量大小,请使用:

    y = m(ones(3,1), :) % duplicates row vector 3 times
    y = y(:)'; % vector representation of array using linear indices

    【讨论】:

    • mean 比手动操作要好,使用ones()y(:) 进行索引也是不错的方法。但我会用.' 转置,而不是'
    • 我知道这是一个旧答案。尽管如此,请考虑按照建议将' 替换为.'。原因:没有.' 用于得到复共轭 转置称为ctranspose。当使用复杂的值时,这将是有问题的并且很难找到。请参阅文档:非共轭转置运算符A.' 执行无共轭转置。也就是说,它不会改变元素虚部的符号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多