0

我有一个看起来有点像这样的数据值矩阵,但要大得多(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)

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

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

4

1 回答 1

2

您可以从数据矩阵中提取所有非 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]

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

于 2013-03-20T15:29:41.407 回答