【问题标题】:Multiple Columns, way to select closest to a value多列,选择最接近值的方法
【发布时间】:2012-07-25 15:53:14
【问题描述】:

我正在尝试分析从 CSV 文件中获取的数据集。将数据读入 matlab 后,我只剩下一个数据变量。每个文件之间的列数和行数会发生变化。有没有一种方法可以对每一列进行平均,然后为具有最接近某个值的平均值的那一列创建一个变量?然后还直接选择该中间列之前和之后的列并为它们创建变量,以及为平均值最低的列创建变量?目前,我正在手动选择列并以这种方式为它们创建变量。

例如:

我有这张数字表。 (在本例中,为了便于平均,我在每列中使用了相同的数字。

    1     2     3     4     5     

    1     2     3     4     5

    1     2     3     4     5

    1     2     3     4     5

    1     2     3     4     5

假设我想要平均值最接近 3.2 的列

该列将是第 3 列,其平均值为 3。然后我希望代码选择之前的列(第 2 列)和之后的列(第 4 列)。以及平均值最低的列(第 1 列)

【问题讨论】:

    标签: matlab variables average


    【解决方案1】:

    首先获取平均值(我假设数据矩阵在变量 X 中):

    Xmns = mean(X);
    

    然后找到最小值,使用“min”:

    [val,ind] = min(Xmns);
    

    “val”保存最小值,“ind”对应Xmns中的索引,也就是对应的列。

    要找到最接近特定值的列均值,您可以再次使用 min:

    [val,ind] = min(abs(Xmns-key_val));
    

    现在“ind”保存列索引,其均值最接近“key_val”。下一列只是“ind+1”,前一列是“ind-1”——只要确保检查你没有超出矩阵的末端(即 ind 可能已经是 1 或 size(X,2))。

    另外,给定列索引“ind”,要使用该列创建一个新变量,您只需使用:

    sc= X(:,ind);
    

    如果您想从 X 中删除该列:

    X(:,ind) = [];
    

    仅此而已。

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多