rand函数不提供双元素

问题描述 投票:0回答:1

我正在为Matlab作业苦苦挣扎:

编写脚本以执行以下操作:

  1. 生成一个大小为8 x 25的等级的矩阵,该矩阵包含1到6范围内double类型的随机数。

  2. 计算矩阵等级的平均值(mrow),矩阵列的平均值(mcol)和矩阵等级的整体平均值(mall)。

  3. 将矩阵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')

我将为这里的任何解决方案感到感谢!

matlab random double
1个回答
0
投票

我假设您的作业验证系统正在检查变量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

© www.soinside.com 2019 - 2024. All rights reserved.