获取矩阵中有效元素的行号和列号
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
我有一个 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