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

时间:2015-01-10 18:59:13

标签: matlab 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]

任何帮助都将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

以下情况应该有效!

[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

答案 2 :(得分:0)

如果您不介意排序,可以使用 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