获取矩阵中有效元素的行号和列号

Getting row and column numbers of valid elements in a matrix

我有一个 3x3 矩阵,填充了 NaN 和一个变量的值:

NaN 7   NaN
5   NaN 0
NaN NaN 4

matrix = [NaN 7 NaN; 5 NaN 0; NaN NaN 4]

我想获取非 NaN 单元格的行号和列号,并将它们与变量值一起放入矩阵中。也就是说,我想获得以下矩阵:

row col value
1   2   7
2   1   5
2   3   0
3   3   4

want = [1   2   7; 2   1   5; 2   3   0; 3   3   4]

非常感谢任何帮助。

以下应该有效!

[p,q]=find(~isnan(matrix)) % Loops through matrix to find indices

want = zeros(numel(p),3) % three columns you need with same number of rows as p

for i=1:numel(p)
    want[i,:] = [p(i) q(i) matrix(p(i), matrix(i))]
end

应该给你正确的结果是:

 2     1     5
 1     2     7
 2     3     0
 3     3     4

这可以在没有循环的情况下完成:

[jj, ii, kk] = find((~isnan(matrix).*(reshape(1:numel(matrix), size(matrix)))).');
result = [ii jj matrix(kk)];

诀窍是将 ~isnan(matrix) 乘以索引矩阵,以便非 NaN 条目的 find gives the linear index 的第三个输出。转置需要与问题中的顺序相同。

如果您不介意行的顺序,您可以使用 Luis Mendo 的 答案的简化版本:

[row, col] = find(~isnan(matrix));
result = [row(:), col(:), matrix(~isnan(matrix))];

这将导致:

 2     1     5
 1     2     7
 2     3     0
 3     3     4