【问题标题】:Count occurrences and stretch array in matlab在matlab中计算出现次数和拉伸数组
【发布时间】:2015-10-14 13:12:23
【问题描述】:

input = [0 0 0 5 5 7 8 8];

我现在想把这个向量转换成表格

output = [3 3 3 3 5 5 6 8];

这基本上是一个楼梯情节。

说明

输入向量用于沿 x 轴绘制数据点。 y 轴由此由 1:length(input) 提供。因此,结果图显示了沿 y 轴的累积数据点数和沿 x 轴的发生时间。

我现在想根据我的数据集拟合一个模型。因此,我需要一个在特定时间(x 值)内提供正确值的向量。

所需的输出向量基本上是阶梯图的结果。我正在寻找一种在 matlab 中生成所需向量的有效方法。结果

[x, y] = stairs(input, 1:length(input));

没有让我靠近。

【问题讨论】:

    标签: matlab vector find-occurrences


    【解决方案1】:

    可以使用bsfxun 完成如下:

    x = [0 0 0 5 5 7 8 8];
    y = sum(bsxfun(@le, x(:), min(x):max(x)), 1);
    

    对于1:numel(x) 中的每个元素,这会计算x 中有多少元素小于或等于该值。

    【讨论】:

    • 用 1:max(x) 替换 1:numel(x) 就可以了!非常感谢你。非常好的解决方案!
    • 啊,我误解了你的问题。那不应该是y = sum(bsxfun(@le, x(:), min(x):max(x)), 1)吗? (例如考虑x = [2 2 2 5 5 7 8]
    • 你是对的。如果 min(x) 与 1 不同,则结果将具有前导零。再次感谢!
    猜你喜欢
    • 2017-08-15
    • 2011-12-15
    • 2015-06-18
    • 1970-01-01
    • 2017-03-24
    • 2015-06-19
    • 1970-01-01
    相关资源
    最近更新 更多