我正在为Matlab作业苦苦挣扎:
编写脚本以执行以下操作:
生成一个大小为8 x 25的等级的矩阵,该矩阵包含1到6范围内double类型的随机数。
计算矩阵等级的平均值(mrow
),矩阵列的平均值(mcol
)和矩阵等级的整体平均值(mall
)。
将矩阵grades
复制到新变量,在其中将第5行和第20至23列中的元素替换为NaN。再次计算此矩阵的总体平均值(mall_2
),即剩余值的平均值。
我完成了任务2-5,但是任务1不正确。我不确定自己在做什么错。我认为这与数字的类型(双精度)有关,但是我无法对其进行转换。
% Generate matrix 'grades' with random numbers in the range 1 to 6
a = 1;
b = 6;
grades = (b-a).*rand(8,25) + a;
% calculate mean values 'mrow', 'mcol', 'mall'
mrow = mean(grades,2)
mcol = mean(grades,1)
mall = mean(grades(:))
% Replace elements with NaN
grades(5,20:23) = NaN
%Calculate mean of elements omitting NaN
mall_2 = mean(grades(:),'omitnan')
我将为这里的任何解决方案感到感谢!
我假设您的作业验证系统正在检查变量grades
中的所有值都是问题1所要求的(随机)数字,范围为1到6。
但是,在计算结束时,NaN
变量中还有3个grades
值,因为您错过了问题3的这一步:
将矩阵
grades
复制到新变量
相反,您覆盖了grades
中的元素。
如果您这样做:
grades_mod = grades;
grades_mod(5,20:23) = NaN;
mall_2 = mean(grades_mod(:),'omitnan');
然后grades
将保留其原始值(无NaN,您可以计算mall_2
。