问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MATLAB如何去除矩阵中的inf点并用周围点的平均值代替?

发布网友 发布时间:2022-04-23 18:50

我来回答

1个回答

热心网友 时间:2023-08-19 16:32

你好,我没有找到符合你条件的方法,
但是我想出了一个办法可以解决你的问题。首先确定你要有统计工具箱,因为要用到nanmean()这个函数

做法是首先把你这个矩阵的inf去掉,改成NaN 假设你的矩阵在x
x(find(isinf(x)))=NaN
然后设定一个维数比x大的矩阵
a= ones(size(x)+2)
a(find(a==1))=NaN
a(2:end-1,2:end-1)=x

这样你就会有一个矩阵:
NaN NaN NaN NaN NaN NaN NaN NaN
NaN 35 1 6 26 19 24 NaN
NaN 3 32 7 NaN 23 25 NaN
NaN 31 9 2 22 27 20 NaN
NaN 8 NaN 33 17 10 15 NaN
NaN 30 5 34 12 14 16 NaN
NaN 4 36 29 13 18 11 NaN
NaN NaN NaN NaN NaN NaN NaN NaN
类似于这样的

这时候你就可以找NaN了,搜索范围在a(2:end-1,2:end-1)

[r,c]=find(isnan(a(2:end-1,2:end-1)))
不知道为什么这个r和c比实际的行和列小1,所以我们可以直接用

你要做的就是
for i = 1:length(r)
a(r(i)+1,c(i)+1) = nanmean(reshape(a(r(i):r(i)+2,c(i):c(i)+2),1,[]))
end

你把我如上代码存为一个.m就可以很方便的运用了。
___________________________________
function [replaced] = replaceInf(x)
x(find(isinf(x)))=NaN
a= ones(size(x)+2)
a(find(a==1))=NaN
a(2:end-1,2:end-1)=x

[r,c]=find(isnan(a(2:end-1,2:end-1)))
for i = 1:length(r)
a(r(i)+1,c(i)+1) = nanmean(reshape(a(r(i):r(i)+2,c(i):c(i)+2),1,[]))
end

replaced = a(2:end-1,2:end-1)
__________________________________
本人原创,希望对你有所帮助。
我没每一步没有做标注,但是很简单的
nanmean是求平均值,忽略NaN。
reshape是把那个取出来的矩阵变成一个数组,不然nanmean会计算每一列的平均值。
当然这个也有小问题,就是nan周围有nan的时候,函数会先计算出第一个NaN的值,赋值,然后去计算下一个的时候就包含了第一个NaN的值了。 这个顺序是根据find找到NaN的顺序来的。 这个你可以自行测试。
例如:

NaN NaN NaN NaN
NaN 2 NaN NaN
NaN NaN 3 NaN
NaN NaN NaN NaN
首先找到 2,3处的NaN
计算平均值 2.5
然后到3,2处的NaN
计算的时候因为2,3处的NaN已经是2.5了
就会把这个NaN加入计算范围中
等于算了(2 + 3 + 2.5)/3
然后赋值2.5给3,2处的NaN

解决方法是,首先单独备份所有NaN周围的数
然后计算的时候用这个备份。
请根据你的需求选择方法,貌似后面的是你要的。 如果有错误还请包含,思路就是如此了。

___________________________________
function [replaced] = replaceInf(x)
x(find(isinf(x)))=NaN
a= ones(size(x)+2)
a(find(a==1))=NaN
a(2:end-1,2:end-1)=x

[r,c]=find(isnan(a(2:end-1,2:end-1)))
for i = 1:length(r)
bak (i)=nanmean(reshape(a(r(i):r(i)+2,c(i):c(i)+2),1,[]))
end
for i = 1:length(r)
a(r(i)+1,c(i)+1) =bak(i)
end

replaced = a(2:end-1,2:end-1)
__________________________________
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 求助!急!matlab中 NaN会参与运算吗 matlab中 NaN会参与运算吗? 在Matlab软件中“NAN”是什么意思? 关于MATLAB的数据处理显示NAN问题 关于matlab中nan读取的问题 matlab中的mean函数是什么意思啊,如何使用 MATLAB中出现NAN怎么回事 在matlab中NAN是什么意思? 单个耳夹戴在那一个耳朵上好看 win8真正关机不是进入高级睡眠状态 win8关机 为什么win8系统的电脑关机变成注销? 请问女生要是想戴一边耳环的话到底是戴左边还是戴右边? 从win8升级到win8.1后,电脑的睡眠和休眠全部变关机 win8混合关机是休眠,电脑还在运行需要电嘛 win8怎么关闭自动睡眠??。 win8关闭盖子就休眠 猪皮的热量是多少? win8.1电源选项里没有睡眠只有关机重启休眠,应该怎么调回来 芦荟肉皮冻的热量是多少? matlab的编程问题,求关于平均数,最小值,最大值,方差等简单的数据处理的程序。 如何将matlab矩阵中的NaN替换成0 matlab 非nan的几何平均数怎么求 matlab中计算结果出现“NAN”是什么意思? matlab中Undefined function 'nansum' for input arguments of type 'double'. matlab中如果在所给的数值中有空数值如何求均值如 2 7 6 5这种类型的我求出来的是NAN请高手帮忙 关于matlab循环计算的问题:本来结果应该都是数值,但是有些出现了NaN,不知是否是程序的问题? matlab 矩阵归一化 对0归一出现NaN的问题~因为出现NaN就不能出现下一步了~急! 红绳脚链,手链应该怎么系呢? matlab计算excel数据里的平均值程序 红绳手链的结怎么编? 这款红绳手链怎么编? 从双城堡到扶余火车列车有哪些车次 列车时刻表查询 火车K976各站到站顺序? k1303次列车都经过哪几站点 k976到站时间点 k56次火车时刻表 k1527次列车途径站点 k1084火车时刻表是怎样的? k340次列车经过哪些站