全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
2811 2
2017-03-14
悬赏 50 个论坛币 已解决
若一个矩阵,如3*9,里面的元素既有空值也有数值,我想找到第3,6,9这3列所有行中的最后一个非空元素,例如:>> x=[nan,nan,nan,1,nan,21,12,nan,21;nan,2,15,1,nan,20,nan,nan,nan;nan,nan,nan,1,nan,23,nan,nan,nan]



x =

     NaN   NaN   NaN 1   NaN    21       12   NaN    21
   NaN     2    15     1   NaN    20   NaN   NaN   NaN
   NaN   NaN   NaN     1   NaN    23   NaN   NaN   NaN
若是只看前一行,第3,6,9这3列的最后一个非空元素就是21;
若是只看前两行,第3,6,9这3列的最后一个非空元素就是20;
若是只看前三行,第3,6,9这3列的最后一个非空元素就是23;
如何快速实现呢

最佳答案

necroen 查看完整内容

加了一行全是NaN的测试数据 程序如下: clear all;clc;close all; x = ... [nan,nan,nan,1,nan,21, 12,nan, 21; nan, 2, 15,1,nan,20,nan,nan,nan; nan,nan,nan,1,nan,23,nan,nan,nan; nan,nan,nan,nan,nan,nan,nan,nan,nan;]; idx = [3, 6, 9]; % 指定列 col = x(:,idx); % 将指定列从矩阵X中截取出来 colNum = length(idx); % 指定列的数目为3 table = []; % 用于记录结果的表 fo ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-3-14 14:10:13
加了一行全是NaN的测试数据

程序如下:
clear all;clc;close all;

x = ...
    [nan,nan,nan,1,nan,21, 12,nan, 21;
     nan,  2, 15,1,nan,20,nan,nan,nan;
     nan,nan,nan,1,nan,23,nan,nan,nan;
     nan,nan,nan,nan,nan,nan,nan,nan,nan;];

idx = [3, 6, 9];  % 指定列
col = x(:,idx);   % 将指定列从矩阵X中截取出来
colNum = length(idx); % 指定列的数目为3

table = []; % 用于记录结果的表

for i = 1:size(x,1)
    flag = 0;   % 默认为0,如果发现非空数则置为1
    for j = colNum:-1:1 % 从每行后面开始遍历  
        if (~isnan( col(i,j) )) % 如果该元素不是NaN则记录到table中
            table = [table; i idx(j) col(i,j)];
            flag = 1;
            break; % 发现了非空值后则不再从后往前遍历,立即跳出循环,开始遍历下一行
        end   
    end
   
    if flag == 0
        disp(strcat('第',num2str(i),'行指定列全是NaN'));
    end   
end

table

结果如下

第4 行指定列全是NaN

table =

     1     9    21
     2     6    20
     3     6    23

table中的数据意思是:
第1行的第9列数值为21,符合要求
第2行的第6列数值为20,符合要求
。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-15 08:48:14
necroen 发表于 2017-3-14 14:10
加了一行全是NaN的测试数据

程序如下:
多谢帮忙[em23][em23],回答的非常细致也解决了我的问题,不过我最终采用的是定位比较的办法,没有通过遍历,似乎会简单点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群