# cell2mat has a very specific condition

1 ビュー (過去 30 日間)
daniel slama 2022 年 6 月 20 日
コメント済み: dpb 2022 年 6 月 20 日
hey all! so i've been playing with cells and structures etc.
i have a structure 'students' with fields:name,id,grades.
in grades i have a nx1 cell array where n is the number of grades per students. the grades are in string and not numbers.
i wanted to calculate every student's avarage. i used a for loop and cell2mat and it gave me an nx2 matrix of char objects.
the problem is the last students, one of his grades is 100 which is 3 letters instead of 2 and because of that cell2mat has no idea how to compensate for it.
i know i could have made things easier for myself if i made a more normal structure in the first place but i'm too far in the excercise now lol.
any idea how to work with this?
##### 2 件のコメント表示非表示 1 件の古いコメント
daniel slama 2022 年 6 月 20 日
of course, my bad.
this is my attempt to calculate every student's avarage with notes of what i tried to to every line.
[a b]=size(students)
for i = [1:1:b]
charmat=cell2mat(students(i).grades) %creates the nx2 matrix and gets stuck with the last student
[c d]=size(charmat)
nummat=[]
for x = [1:1:c]
temp=str2num(charmat(x,:)
nummat=[nummat ; temp] %makes a number matrix out of the char matrix
end
students(i).avarage=mean(nummat)
end

サインインしてコメントする。

### 採用された回答

dpb 2022 年 6 月 20 日
Indeed, you made dereferencing the data about as hard as could by putting it into cell array -- a struct could/can hold an ordinary array; it shouldn't be too hard to change the code to make the grades arrays numeric to start with...but one way to your objective here is\
ans =
84.0000 98.5000 86.1667 57.3333 87.2500
>>
##### 2 件のコメント表示非表示 1 件の古いコメント
dpb 2022 年 6 月 20 日
Will become familiar idiom (along with the companion functions for cell arrays and sructure fields) with time...

サインインしてコメントする。

### カテゴリ

Find more on Structures in Help Center and File Exchange

R2020b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by