【问题标题】:Line plot of rows in a Matlab matrix with the x-axis is the maximum valueMatlab矩阵中行的线图,x轴是最大值
【发布时间】:2014-07-04 23:56:40
【问题描述】:

我是新来的,也是 matlab 的新手。

我在 matlab 中有一个矩阵文件,我想做的是绘制所有行的平均值。但是,我只想在该行中的最大值之前和之后绘制几个数据点(大约 20 个)。矩阵文件有 550 列。

我已经研究出如何识别最大值和这个最大值的列号使用;

[maxvalue maxindex] = max(filename, [], 2)

由于最大值从不在同一列中,我真的需要帮助来计算每行的平均值(最大值之前和之后),然后如何在 x 上的最大值为 0 的地方绘制它-轴。

例如 - 我有一个这样的矩阵;

 14    51   623    23     4     1     4     5
 0     0     3     5    67    37    37     5
 0     0     0     0   574     4     5     6

最大值 = 623 67 574

最大索引 = 3 5 5

所以我想绘制 3 行的平均值,最大值前后的 2 个数据点……所以绘制平均值;

14, 51, 623, 23, 4, 1
3, 5, 67, 37, 37
0, 0, 574, 4, 5

非常感谢您的帮助!

【问题讨论】:

    标签: matlab


    【解决方案1】:
    data = [14    51   623    23     4     1     4     5
             0     0     3     5    67    37    37     5
             0     0     0     0   574     4     5     6]; %// example data
    data = data.'; %'// it's easier to work along columns
    [~, pos] = max(data); %// position of maxima
    ind = bsxfun(@plus,bsxfun(@plus, pos,(-2:2).'),(0:size(data,2)-1)*size(data,1));
    %'// linear index into the matrix obtained from pos
    data_trimmed = data(ind).'; %'// index and transpose back
    data = data.'; %'// undo transpose to put data back into shape
    

    结果:

    data_trimmed =
    
        14    51   623    23     4
         3     5    67    37    37
         0     0   574     4     5
    

    【讨论】:

    • bsxfun 的好主意!好奇这是否会处理最大值位于边缘(最左侧/最右侧)时的情况?
    • @Divakar 这行不通。但这是原始问题的问题,而不是这个答案;-)
    • @LuisMendo 完美地满足了我的需求!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多