Matlab:数字数组索引到字符串数组(无循环)
Matlab: Numerical array index into a string array (without loops)
我正在做麻省理工学院 OCW 的 MATLAB 入门课程中的一组问题。你可以看到它 here,它是问题编号 9,第 g.iii 部分。
我有一个包含一门课程最终成绩的矩阵,它们的范围都是从 1 到 5。我有另一个数组,只有从 'F'
到 'A'
的字母(在 'decreasing'
订单)。
我知道如何更改矩阵中的元素,我想我可以为每个数字做这样的事情:
totalGrades(find(totalGrades==1)) = 'F';
totalGrades(find(totalGrades==2)) = 'E';
totalGrades(find(totalGrades==3)) = 'C';
totalGrades(find(totalGrades==4)) = 'B';
totalGrades(find(totalGrades==5)) = 'A';
但是,创建字符串数组的目的是什么 "letters"?
我考虑过使用循环,但我们应该在课程的那个时候不使用循环来解决问题。
有办法吗?我很高兴知道。这是我解决整个问题的代码,但我陷入了最后一个问题。
load('classGrades.mat');
disp(namesAndGrades(1:5,1:8));
grades = namesAndGrades(1:15,2:size(namesAndGrades,2));
mean(grades);
meanGrades = nanmean(grades);
meanMatrix = ones(15,1)*meanGrades;
curvedGrades = 3.5*(grades./meanMatrix);
% Verifying
nanmean(curvedGrades)
mean(curvedGrades)
curvedGrades(curvedGrades>=5) = 5;
totalGrades = nanmean(curvedGrades,2);
letters = 'FDCBA';
非常感谢!
尝试:
letters=['F','D','C','B','A'];
tg = [1 2 1 3 3 1];
letters(tg)
结果:
ans = FDFCCF
即使 tg(总成绩)是一个矩阵,这也有效:
letters=['F','D','C','B','A'];
tg = [1 2 1 ; 3 3 1];
result = letters(tg);
result
result =
FDF
CCF
编辑(简要说明):
很容易理解,当您执行 letters(2)
时,您将获得字母的第二个元素 (D
).
但是你也可以通过给它一个数组来 select 来自 letters
的几个元素:letters([1 2])
将 return 第一个和第二个元素 (FD
).
因此,letters(indexesArray)
将生成一个长度与 indexesArray
相同的新数组。但是,这个数组必须包含从 1 到 letters
长度的数字(否则会弹出错误)。
我正在做麻省理工学院 OCW 的 MATLAB 入门课程中的一组问题。你可以看到它 here,它是问题编号 9,第 g.iii 部分。
我有一个包含一门课程最终成绩的矩阵,它们的范围都是从 1 到 5。我有另一个数组,只有从 'F'
到 'A'
的字母(在 'decreasing'
订单)。
我知道如何更改矩阵中的元素,我想我可以为每个数字做这样的事情:
totalGrades(find(totalGrades==1)) = 'F';
totalGrades(find(totalGrades==2)) = 'E';
totalGrades(find(totalGrades==3)) = 'C';
totalGrades(find(totalGrades==4)) = 'B';
totalGrades(find(totalGrades==5)) = 'A';
但是,创建字符串数组的目的是什么 "letters"?
我考虑过使用循环,但我们应该在课程的那个时候不使用循环来解决问题。
有办法吗?我很高兴知道。这是我解决整个问题的代码,但我陷入了最后一个问题。
load('classGrades.mat');
disp(namesAndGrades(1:5,1:8));
grades = namesAndGrades(1:15,2:size(namesAndGrades,2));
mean(grades);
meanGrades = nanmean(grades);
meanMatrix = ones(15,1)*meanGrades;
curvedGrades = 3.5*(grades./meanMatrix);
% Verifying
nanmean(curvedGrades)
mean(curvedGrades)
curvedGrades(curvedGrades>=5) = 5;
totalGrades = nanmean(curvedGrades,2);
letters = 'FDCBA';
非常感谢!
尝试:
letters=['F','D','C','B','A'];
tg = [1 2 1 3 3 1];
letters(tg)
结果:
ans = FDFCCF
即使 tg(总成绩)是一个矩阵,这也有效:
letters=['F','D','C','B','A'];
tg = [1 2 1 ; 3 3 1];
result = letters(tg);
result
result =
FDF
CCF
编辑(简要说明):
很容易理解,当您执行 letters(2)
时,您将获得字母的第二个元素 (D
).
但是你也可以通过给它一个数组来 select 来自 letters
的几个元素:letters([1 2])
将 return 第一个和第二个元素 (FD
).
因此,letters(indexesArray)
将生成一个长度与 indexesArray
相同的新数组。但是,这个数组必须包含从 1 到 letters
长度的数字(否则会弹出错误)。