作者sblk (Time)
看板MATLAB
标题Re: 如何使用if回圈
时间Wed Jun 28 09:41:36 2017
※ 引述《RevelationSD (少冰半糖)》之铭言:
: Matlab新手发问,如有冒犯请见谅
: 我有一个12*48的矩阵,有几个无意义的数字
: 我想要将这些数字取代成我要的数字
: 例如-999999要去除
: -999998要以nan取代
: -999997要以0取代
: 请问该如何以if的回圈来写,卡了一个晚上还是写不出来....
借用例子让小弟练习一下,如果其他好的方法,敬请不吝指教。
我简化问题为: 矩阵里小於-5的值(n<-5)取代为Nan,
大於等於-5但小於等於0的值(-5<=n<=0)取代为 0。
作法如下:
clear;clc;
data = randi(100, 12, 48)-10; % 产生资料矩阵
[m,n] = find(data < -5);
nan_data = data; % 方便完成计算後对照,可省略
for i = 1:length(m)
nan_data(m(i),n(i)) = nan;
end
[mm,nn] = find(-5 < data & data <= 0);
zero_nan_data = nan_data; % 方便完成计算後对照,可省略
for j = 1:length(mm)
zero_nan_data(mm(j),nn(j)) = 0;
end
zero_nan_data = nan_data;
如原文推文所提示,find可以output出row和column的值,
所以只需要一层回圈就可以,而且不会影响矩阵大小。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 192.31.105.129
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1498614105.A.6CA.html
1F:推 sunev: 用matlab要学习避开回圈 07/01 14:19