【问题标题】:Formatting matrix data for ANOVAN in MATLAB在 MATLAB 中为 ANOVAN 格式化矩阵数据
【发布时间】:2013-03-20 15:09:16
【问题描述】:

我有一个数据值矩阵,看起来有点像这样,但要大得多(2000+ 行,30+ 列):

NaN   12   3   NaN   18   NaN   42   NaN    NaN   NaN   NaN...
68    NaN  14  Nan   NaN  NaN   NaN  NaN    NaN   NaN   26 ...
...

所以你看到它主要由 NaN 值填充。自然,我感兴趣的是由值填充的单元格。

我希望能够在这个数据集上运行 anovan,不幸的是它太大而无法手动重新格式化。我想要做的是让一个脚本在矩阵中运行,找到每个不是 NaN 的值及其在矩阵中的索引,并为 anovan 输入创建三个数组:

值=[12 3 18 42 68 14 26 ...]

行= [ 1 1 1 1 2 2 2 ...]

列= [ 2 3 5 7 1 3 11 ...]

行和列对应于研究中的评分者和评分者,这就是为什么保留每个值的准确索引对我来说如此重要的原因。

不过,我不知道该怎么做。

我尝试过使用 find,但无法让它做我想做的事情。

[r c v] = find(~isnan(datamatrix)) %% doesn't work

编辑:我觉得我可以这样做:

[r c v] = find(datamatrix)

不过,这将包括所有 NaN 值,在 [r c v] 输出中。在那种情况下,我将如何遍历 V 数组并删除 NaN 值及其对应的 R 和 C 值?

EDIT2:从头开始。我忘记了我的一些值是 0,所以我不能使用 FIND 命令。

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    您可以像这样从数据矩阵中提取所有非 NaN 数字及其索引:

    i = find(~isnan(datamatrix)); 
    values = datamatrix(i);
    [rows,columns] = ind2sub(size(datamatrix),i);
    

    对于您包含的示例数据,这会导致:

    rows' = [2   1   1   2   1   1   2]
    columns' = [ 1    2    3    3    5    7   11]
    values' = [68   12    3   14   18   42   26]
    

    这就是所有索引及其所有对应的值。如果您需要以特定方式订购它们,则必须单独进行。

    【讨论】:

    • 啊,我知道我快搞清楚了,但我不知道 ind2sub 命令!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2012-10-16
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多