讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。
MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili
节选自第3章 3.4.4 逻辑运算
3.4.4.3 使用逻辑值修改或删除矩阵元素
上一小节我们介绍了利用逻辑值引用矩阵的元素,我们也可以对引用的元素进行修改或删除。下面我们直接看例子:
从上表最后一个例子可以看出,使用逻辑索引删除矩阵中的元素后,MATLAB会将矩阵中剩下的元素按照线性索引的顺序放入到一个行向量中。
我们再来看一个有趣的问题:缺失值的识别和填补。
举个例子:假设清风老师要连续一周测量早上6点室外的温度,结果清风老师周二和周五睡过了头,那两天的温度没有测量,剩下五天的温度分别是10°、5°、2°、8°和5°,周二和周五的温度成了缺失值。现在清风老师想利用有数据的剩余五天的平均气温来代替周二和周五这两天的温度,于是他计算出这五天的平均气温为(10+5+2+8+5)/5=6°,这时候就完成了对缺失值的填补。
那么我们怎样在MATLAB中实现这个过程呢?我们可以先定义一个向量A用来保存这一周的温度:A = [10 NaN 5 2 NaN 8 5],其中第二个元素和第五个元素为NaN,代表周二和周五的温度数据是缺失的。现在需要大家将A中所有的NaN值替换成所有非缺失值的平均值。
答案只需要一行代码:A(isnan(A)) = mean(A(~isnan(A)))。这里用到了isnan函数,它可以判断数组中的元素是否为不定值NaN,并返回一个和输入的数组大小相同的逻辑数组。
例如,这里的isnan(A)返回的结果就是[0 1 0 0 1 0 0]这个逻辑向量。
有同学会想:为什么不直接用命令A==NaN来找A中的缺失值?这是因为在MATLAB中,NaN相互之间不相等,运行NaN == NaN会输出逻辑值0。
那么,如何找出A中所有非缺失值的元素呢?我们可以对isnan(A)的结果进行“逻辑非”运算,即~isnan(A),然后再利用这个逻辑向量对A进行索引:A(~isnan(A))。
详细的介绍大家可以看本讲义的配套视频。后续章节中我们会更系统地介绍缺失值的知识点,现在只是小试牛刀。