我有一个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]
任何帮助都将受到高度赞赏。
答案 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