查看完整版本 : [MATLAB基础] 用均值代替NaN
这个矩阵是老师直接给我的,是1933*457,里边有一些缺失数据用NaN表示了,我现在要进行数据预处理,所以就想把矩阵中的NaN去掉,用上下的有效值的平均数来表示,这样说够明白了吗?矩阵很大,实在不知道怎么写代码,写了很多个都错了,请问,究竟要怎么写才能实现呢?请高手指点,这个对你们来说非常简单的问题我已经想了两天了
libralibra
2011-04-16, 02:16
测试数据 a = magic(10);
a
b = randi(100,1,15);
a(b) = NaN;
a
a(isnan(a)) = mean2(a(~isnan(a)));
a
运行结果
a =
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
a =
92 99 1 8 15 67 NaN 51 58 40
98 80 7 NaN 16 73 55 57 64 NaN
4 81 NaN 20 22 NaN 56 63 NaN 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 NaN 52 34
17 NaN 76 83 NaN 42 NaN 26 33 65
23 NaN NaN 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
NaN 12 94 96 78 35 NaN 44 46 53
11 18 100 77 84 36 43 NaN 27 59
a =
92.0000 99.0000 1.0000 8.0000 15.0000 67.0000 50.4353 51.0000 58.0000 40.0000
98.0000 80.0000 7.0000 50.4353 16.0000 73.0000 55.0000 57.0000 64.0000 50.4353
4.0000 81.0000 50.4353 20.0000 22.0000 50.4353 56.0000 63.0000 50.4353 47.0000
85.0000 87.0000 19.0000 21.0000 3.0000 60.0000 62.0000 69.0000 71.0000 28.0000
86.0000 93.0000 25.0000 2.0000 9.0000 61.0000 68.0000 50.4353 52.0000 34.0000
17.0000 50.4353 76.0000 83.0000 50.4353 42.0000 50.4353 26.0000 33.0000 65.0000
23.0000 50.4353 50.4353 89.0000 91.0000 48.0000 30.0000 32.0000 39.0000 66.0000
79.0000 6.0000 13.0000 95.0000 97.0000 29.0000 31.0000 38.0000 45.0000 72.0000
50.4353 12.0000 94.0000 96.0000 78.0000 35.0000 50.4353 44.0000 46.0000 53.0000
11.0000 18.0000 100.0000 77.0000 84.0000 36.0000 43.0000 50.4353 27.0000 59.0000
大侠,谢谢您的回答,可是我要的不是矩阵中所有数的均值,而是这个NaN值上下值的均值啊,要怎么改?
libralibra
2011-04-17, 00:50
跟位置有关,必须循环了
vBulletin® v3.8.3,版权所有 ©2000-2025,Jelsoft Enterprises Ltd.