Matlab中,怎样能去除向量或矩阵中的NaN和0元素,但又不改变其它元素的索引值?
A,B,C同为向量,C=A./B;要求找出C中前100个(向量元素足够多)最大或最小的元素。我的做法是:将C排序(升序或降序),返回索引:C_index=sort(C);...
A, B, C同为向量, C = A ./ B; 要求找出C中前100个(向量元素足够多)最大或最小的元素。
我的做法是:将C排序(升序或降序),返回索引: C_index = sort(C);
得到结果:Result = C( C_index(1:100) );
问题是:A/B中都有为0的元素,和NaN的元素,怎样能在Result中去除这些元素,得到前100个有含义的数值元素(比如价格),但又不改变A,B中的元素索引值呢?
感谢回答! 展开
我的做法是:将C排序(升序或降序),返回索引: C_index = sort(C);
得到结果:Result = C( C_index(1:100) );
问题是:A/B中都有为0的元素,和NaN的元素,怎样能在Result中去除这些元素,得到前100个有含义的数值元素(比如价格),但又不改变A,B中的元素索引值呢?
感谢回答! 展开
1个回答
展开全部
按照你所说A,B有0元素
所以C有0元素(0除以非0)或者inf元素(非零除以0),或者nan元素(0除以0)
要在排序的时候忽略他们,只要将他们改写为一定排不上前100的数就可以了
要找最大的元素的时候,可以将对应的数改为-inf,那么这些数肯定排在最小
要找最小的元素的时候,可以将对应的数给为inf,那么这些数肯定排在最大
数据足够多的时候,前100个数肯定就没有它们的身影
例如在C中忽略nan,找前100个最大的数
D=C;
D(isnan(D))=-inf;
sD=sort(D,'descend'); %降序排序
Result =sD(1:100);
不用用到索引
要忽略某些值,只要让那些等于哪些值的值变为-inf就可以了
忽略inf:D(isinf(D))=-inf;
忽略0:D(D==0)=-inf;
找最小的时候,将这些值给为inf,用升序排列
所以C有0元素(0除以非0)或者inf元素(非零除以0),或者nan元素(0除以0)
要在排序的时候忽略他们,只要将他们改写为一定排不上前100的数就可以了
要找最大的元素的时候,可以将对应的数改为-inf,那么这些数肯定排在最小
要找最小的元素的时候,可以将对应的数给为inf,那么这些数肯定排在最大
数据足够多的时候,前100个数肯定就没有它们的身影
例如在C中忽略nan,找前100个最大的数
D=C;
D(isnan(D))=-inf;
sD=sort(D,'descend'); %降序排序
Result =sD(1:100);
不用用到索引
要忽略某些值,只要让那些等于哪些值的值变为-inf就可以了
忽略inf:D(isinf(D))=-inf;
忽略0:D(D==0)=-inf;
找最小的时候,将这些值给为inf,用升序排列
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询