matlab nan中出现NAN怎么回事

查看: 11400|回复: 8|关注: 0
matlab中矩阵怎么求平均值呀?矩阵的每行每列都有nan
matlab中矩阵怎么求平均值呀?矩阵的每行每列都有nan谢谢~~~~
关注者: 1
有nan不行啊。未知就谈不上均值了
求nan之外的值的均值
mean2(a(~isnan(a))),所有数据的均值。
假设你的矩阵是A,先将所有的nan设为0,然后就可以随便求均值了
A(find(isnan(A)==1)) = 0
A(find(isnan(A)))=0
关注者: 27
首先设为0不一定可取,因为0虽然不影响总和,但是会增加参与求均值的元素个数,所以这样就不能算是“求nan之外的值的均值”了。当然可能我对楼主的意思理解有偏差。
试一下nanmean函数。和mean的用法一样,只是将Nan看作不存在。
stellari 发表于
首先设为0不一定可取,因为0虽然不影响总和,但是会增加参与求均值的元素个数,所以这样就不能算是“求nan ...
太牛了!就是这样!
首先设为0不一定可取,因为0虽然不影响总和,但是会增加参与求均值的元素个数,所以这样就不能算是“求nan ...
顶一下,nanmean函数好用!
站长推荐 /2
Powered by查看: 5129|回复: 8|关注: 0
为什么Matlab运行的结果是NaN呢,急盼解答
有个程序,运行完以后,得到的运行结果全是NaN矩阵,为什么会出现这种情况?
& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN
& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN
& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN
& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN
& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN
& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN
& &NaN& &NaN& &NaN& &NaN& &NaN& &NaN
这是运行结果,百思不得其解啊
分母是不是出现0了?建议在分母上加eps,最好贴出代码
可能的原因很多,你这样只把结果贴出来别人很难看出问题在哪儿
关注者: 2
一般是分母为零造成
呵呵,初来乍到,补上代码,望指点。
ch21=double(sample(1:265,9));
ch22=sample(266:895,9);
ch23=sample(896:1286,9);
ch24=sample();
ch25=sample();
ch26=sample();
ch31=sample(1:265,10);
ch32=sample(266:895,10);
ch33=sample(896:1286,10);
ch34=sample();
ch35=sample();
ch36=sample();
ch41=sample(1:265,11);
ch42=sample(266:895,11);
ch43=sample(896:1286,11);
ch44=sample();
ch45=sample();
ch46=sample();
class1=[ch21,ch31,ch41];
class2=[ch22,ch32,ch42];
class3=[ch23,ch33,ch43];
class4=[ch24,ch34,ch44];
class5=[ch25,ch35,ch45];
class6=[ch26,ch36,ch46];
class=[class1;class2;class3;class4;class5;class6];
% plot3(class1(:,1),class1(:,2),class1(:,3),'r.');
% plot3(class2(:,1),class2(:,2),class2(:,3),'g.');
% plot3(class3(:,1),class3(:,2),class3(:,3),'b.');
% plot3(class4(:,1),class4(:,2),class4(:,3),'g+');
% plot3(class5(:,1),class5(:,2),class5(:,3),'b+');
% plot3(class6(:,1),class6(:,2),class6(:,3),'r+');
% title('character 1-2-3');
% hold off
% figure,scatter3(ch21,ch31,ch41,'r.');
% scatter3(ch22,ch32,ch42,'g.');
% scatter3(ch23,ch33,ch43,'b.');
% scatter3(ch24,ch34,ch44,'r+');
% scatter3(ch25,ch35,ch45,'g+');
% scatter3(ch26,ch36,ch46,'b+');
% axis([100,200,40,100,40,160])
I=imread('temporal99.tif');
for i=1:4:400
& & for j=1:4:400
& && &&&randsample1(n)=I(i,j,1);
& && &&&randsample2(n)=I(i,j,2);
& && &&&randsample3(n)=I(i,j,3);
& && &&&n=n+1;
randsample=[randsample1;randsample2;randsample3]';
randsample = double(randsample);
alpha=[265/9,391/9,365/9];
mu1=[mean(ch21),mean(ch31),mean(ch41)]';
mu2=[mean(ch22),mean(ch32),mean(ch42)]';
mu3=[mean(ch23),mean(ch33),mean(ch43)]';
mu4=[mean(ch24),mean(ch34),mean(ch44)]';
mu5=[mean(ch25),mean(ch35),mean(ch45)]';
mu6=[mean(ch26),mean(ch36),mean(ch46)]';
mumu=[mu1,mu2,mu3,mu4,mu5,mu6];
sigma1=cov(class1);
sigma2=cov(class2);
sigma3=cov(class3);
sigma4=cov(class4);
sigma5=cov(class5);
sigma6=cov(class6);
sigma=[sigma1,sigma2,sigma3,sigma4,sigma5,sigma6];
tempmu=zeros(size(mumu));
tempsigma=zeros(size(sigma));
tempalpha=zeros(size(alpha));
% tempVaue = zeros(size(mumu));
% while abs(tempmu-mumu)&repmat([10 10 10],6,1)'||abs(tempsigma-sigma)&repmat([10 10 10],3,6)||abs(tempalpha-alpha) &[0.1,0.1,0.1,0.1,0.1,0.1]
% while norm(tempmu-mumu)&sqrt(75) || norm(tempsigma-sigma)&sqrt(300) || norm(tempalpha-alpha)&sqrt(0.03)
& &while sqrt(sum(sum((tempmu-mumu).^2)))+sqrt(sum(sum((tempsigma-sigma).^2)))+sqrt(sum((tempalpha-alpha).^2))&sqrt(375)
%& &&&tempValue = abs(tempMu - munu);
& &&&tempmu=
& &&&tempsigma=
& &&&tempalpha=
& & for b=1:10000
& && &&&for a= 1:6
& && && && &detsigma = det(sigma(:,(a-1)*3+1:a*3));
& && && && &M = exp((-.5)*(randsample(b,:)'-mumu(:,a))'*inv(sigma(:,(a-1)*3+1:a*3))*(randsample(b,:)'-mumu(:,a)));
& && && && &Tao(a) = alpha(a)*detsigma^(-.5)*M;
& && &&&end
& && &&&for c=1:6
& && && && &tao(c,b)=1.0/sum(Tao)*alpha(c)*detsigma^(-.5)*M;
& && && && &
& && &&&end
& & for A = 1:6
& && &&&for B = 1:10000
& && && && &alpha(A) = mean(tao(A,:));
& && && && &
& && && &&&
& && && &&&sum1=+tao(A,B)*randsample(B,:)';
& && && &&&sum2=+tao(A,B)*(randsample(B,:)'-mumu(:,A))*(randsample(B,:)'-mumu(:,A))';
%& && && &end
& && && && &
& && && &switch A
& && && && &case 1
& && && && && & m=size(ch21,1);
& && && && &case 2
& && && && && & m=size(ch22,1);
& && && && &case 3
& && && && && & m=size(ch23,1);
& && && && &case 4
& && && && && & m=size(ch24,1);
& && && && &case 5
& && && && && & m=size(ch25,1);
& && && && &case 6
& && && && && & m=size(ch26,1);
& && && &end
& && && &&&for n=1:m
& && && && & sum3=+(class(m0+n,:)'-mumu(:,A))*(class(m0+n,:)'-mumu(:,A))';
& && && && & sum4 =+class(m0+n,:)';
& && && && &
& && && && & m0=+m;
& && && && &end
& && && && &
& && && && &mumu(1:3,A)=1.0/(m+10000*alpha(A))*(sum1+sum4);
& && && && &sigma(1:3,(A-1)*3+1:A*3)=1.0/(m+10000*alpha(A))*(sum3+sum2);
& && &&&end
%& &&&mumu=[mumu(1),mumu(2),mumu(3),mumu(4),mumu(5),mumu(6)];
%& &&&sigma=[sigma(1),sigma(2),sigma(3),sigma(4),sigma(5),sigma(6)];
& && & Mu = mumu
& && & Sigma = sigma
& && & Alpha = alpha
回复 4# shi01fg 的帖子
这个程序主要是估计图像类别的参数
采用的是E-M迭代算法,我检查了每个分母,都能保证它不为0
关注者: 1
是不是数据太小&&精度不高&&记录成0了?
提高精度时候是
format long
关注者: 3
是不是你的sample矩阵本身就含有NaN数(即非数not a number)
至于NaN的计算,其初等运算均返回NaN
某些逻辑运算返回0 或1
函数isnan( )寻找某矩阵是否含有nan数等等
学习下 呵呵
站长推荐 /2
Powered by查看: 12734|回复: 9
如何删除矩阵中含有NaN的行
该用户从未签到
比如,有一个207*7的矩阵X,其中含有一些非法值NAN,我想做到:一旦某一行中出现一个nan,那么就把这一行删除,最后得到一个n*7的矩阵XX。我记得如果是以为的向量,可以用X(find(isnan(X)))=[];的方式完成,但是**的,我试了几次都没有找到方法,请高手帮忙,谢谢!
该用户从未签到
还是自己解决了 X(find(isnan(X(:,2))),:)=[];
签到天数: 12 天[LV.3]偶尔看看II
鼓励自己动手丰衣足食,也欢迎你再来论坛哦
X(find(isnan(X(:,2))),:)=[];
还可以简化为
X(isnan(X(:,2)),:)=[]
该用户从未签到
恩,谢谢了
签到天数: 309 天[LV.8]以坛为家I
先学习学习了。
签到天数: 297 天[LV.8]以坛为家I
挺不错的!学习了!!
网站官方,,,保证您有偿编程安全。
签到天数: 321 天[LV.8]以坛为家I
DYNAMIC解答的很好!不错的!多谢谢!!
该用户从未签到
好像没人提到这个any函数?
data(any(isnan(data)), :)=[]
网站官方,,,保证您有偿编程安全。
该用户从未签到
这个需要循环吧,如果按照楼上的做法只是对第二列进行了非数筛选,其他列出现非数的话是无法删除所在行的。
签到天数: 9 天[LV.3]偶尔看看II
感谢这个帖子啊解决了我的问题
网站官方,,,保证您有偿编程安全。
Powered byMatlab问题汇总-如何去除矩阵中的NaN元素
将NaN转化为数字或去掉
&&a(isnan(a)) = []
a = 2 & &3 &
以下是几种方法:
注:判断一个值是否为NaN,只能用
isnan(),而不可用 x==NaN;&
i = find( ~ isnan(x));
先找出值不是NaN的项的下标,将这些元素保留
x = x(find( ~ isnan(x)))
同上,去掉NaN
x = x( ~ isnan(x));
更快的做法
x(isnan(x)) = [];
x(any(isnan(X)’),:) = [];
把含有NaN的行都去掉
&&a=[2 3 nan 3 5 nan]
2 & & 3 & NaN
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。在matlab中NAN是什么意思?-中国学网-中国IT综合门户网站
> 在matlab中NAN是什么意思?
在matlab中NAN是什么意思?
转载 编辑:李强
为了帮助网友解决“在matlab中NAN是什么意思?”相关的问题,中国学网通过互联网对“在matlab中NAN是什么意思?”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:在matlab中NAN是什么意思?,具体解决方案如下:解决方案1:NAN Not A Number就是代表不是一个数据经常用在下面两种情况1.数据处缉福光凰叱好癸瞳含困理时,在实际工程中经常数据的缺失或者不完整,此时我们可以将那些缺失设置为nan,Matlab处理缺失的数据时就会跳过或者其他处理——这个是Matlab优越于其他语言的表现之一。另外但读取数据时,某个字符不是数据,那么Matlab自动将它认为nan处理比如Matlab中提供的nanmean, nanmax, nanmin, nanstd, nansum, nanvar这么多函数可以处理包含nan的数据2.还有就是绘图的时候,如果我们想挖掉一部分,那么nan就起作用了比如我们要绘制z=x^2+y^2在[-10 10]区域的图形但是要挖掉x&sin(y)的那部分,那我们看看如何操作[code][x,y]=meshgrid(-10:0.1:10);z=x.^2+y.^2;subplot(121)mesh(x,y,z)sel=x&sin(y);z(sel)=subplot(122)mesh(x,y,z)解决方案2:谢谢您,很受用,呵呵解决方案3:NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.缉福光凰叱好癸瞳含困0 或者求负数的平方根。NaN 实际上不是一个数,而是一族。通过对数据库的索引,我们还为您准备了:NaN returns the IEEE arithmetic representation for Not-a-Number (NaN). These result from operations which have undefined numerical results. 指不存在这个数。===========================================nan就是非数,像0除以0,或inf减去inf,或者sin(inf)之类得到的结果就是非数,非数的任何算数运算得到的也都是非数。 你这里即复数的实部和虚部都是非数。=========================================== Not a Number不是一个数===========================================NaN就是Not a Number 0/0, ∞/ ∞, 0× ∞等运算都会产生NaN Matlab用NAN来真实记录0/0, ∞/ ∞, 0× ∞等运算的后果,避免可能因上述计算而造成的程序执行的中断。=========================================== 在Matlab中,NaN是一个预定义的常量,表示"不明确的数值结果"。还有Inf表示"无穷大",pi表示常数π等等。===========================================意思是not a number 会返回 NaN 的运算有如下三种: 操作数中至少有一个是 NaN 的运算 未定义操作 下列除法运算:0/0、∞/∞、∞/?∞、?∞/∞、?∞/?∞ 下列乘法运算:...===========================================这是说明没有寻找到满足你所设定的条件的点,所以用empty matrix表示===========================================C = NaN(size(B)); % 创建一个全是nan的矩阵C,尺寸与矩阵B一样 for i= 1:30 % i=1to30循环 Y = B(:,i); % Y是B矩阵的第i列 X = NaN(size(B,1), 34); % X是一个全是nan的矩阵...===========================================Not A Number 一般来说应该是无穷大之类的了===========================================我好想没算出nan嘛Q=17;A=0;for m=1:Q for n=1:Q A=A+1/(((2*m-1)/5)^2+((2*n-1)/5)^2)^2; endendA ____________你用eval干什么,用doub...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助}

我要回帖

更多关于 matlab nan 0 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信