楼主: lixuewei3
2881 2

[问答] 矩阵中某几列的最后一个非空元素位置和数值 [推广有奖]

  • 6关注
  • 5粉丝

已卖:127份资源

副教授

67%

还不是VIP/贵宾

-

威望
0
论坛币
-330314 个
通用积分
3352.3510
学术水平
20 点
热心指数
38 点
信用等级
24 点
经验
30041 点
帖子
1066
精华
0
在线时间
710 小时
注册时间
2014-1-13
最后登录
2024-4-23

楼主
lixuewei3 发表于 2017-3-14 14:10:12 |AI写论文
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 ...
关键词:最后一个 如何快速 元素

沙发
necroen 发表于 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,符合要求
。。。
已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
lixuewei3 + 60 + 20 + 1 + 1 精彩帖子

总评分: 经验 + 60  论坛币 + 20  学术水平 + 1  热心指数 + 1   查看全部评分

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

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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-5 19:52