scalar vs nonscalar structure: advantages?
41 ビュー (過去 30 日間)
古いコメントを表示
The Finnish Rein Deer
2020 年 3 月 10 日
コメント済み: The Finnish Rein Deer
2020 年 3 月 12 日
Hi,
What are the advantages/disadvantages of both typs of structures?
I am about to save my research participant data in Matlab but undecided about which type of structure to use.
Thank you,
TD
1 件のコメント
Adam
2020 年 3 月 10 日
編集済み: Adam
2020 年 3 月 10 日
I've never found a situation in which I'd need to choose between the two, to be honest. Putting aside the fact that I hate structures and use classes instead, since one is scalar and one is non-scalar that means, by definition, they are suitable for different scenarios. So even though it is obvious the only real advantage and disadvantage of the two is their property of being scalar or non-scalar and in most situations your data dictates whether you need something scalar or not! Both are still structures - basically like a christmas tree that you can just hang anything on and don't know what it is until you interrogate the struct.
採用された回答
Steven Lord
2020 年 3 月 10 日
What you want to do with your data? This documentation page gives two examples that show how each type of struct allows you to "slice" your data in a different way.
In the first example (the RGB image) accessing all the data in one color plane is easy while accessing all the data for a single pixel across the three planes is more involved.
In the second example (the patient data) accessing all the data for one patient is easy while accessing a particular piece of data for all patients is more involved.
I would like to point out one alternative that may be a better fit for your needs. If you have data arranged as a rectangular table consider storing it as a table array or a timetable array. If you look at the examples on the table documentation page you can see that you can access all data for a particular patient (in the "Specify Row Names" example) or all of a particular type of data for each patient ("Store Related Data Variables in Table") through one indexing expression.
13 件のコメント
Steven Lord
2020 年 3 月 11 日
The Finnish Rein Deer: if you get confused, you can always ask MATLAB.
S.Name = {'CLARK';'BROWN';'MARTIN'};
S.Gender = {'M';'F';'M'};
S.SystolicBP = [124;122;130];
S.DiastolicBP = [93;80;92];
isscalar(S)
ans =
logical
1
isstruct(S)
ans =
logical
1
If you ask if your other struct array isscalar it will tell you false (logical 0.)
isvector, iscolumn, and ismatrix all return true on the other struct array from your example, while isrow returns false.
Guillaume: The second is a structure array where each field is scalar.
To be pedantic, that's mostly but not completely correct. The Gender, SystolicBP, and DiastolicBP fields contain scalars. The Name fields contain char vectors. If you made them store string arrays you could make them scalar string arrays.
S(1).Name = 'CLARK'; % ' makes a char vector
isscalar(S(1).Name) % false
S(2).Name = "BROWN"; % " makes a string in recent releases
isscalar(S(2).Name) % true
その他の回答 (1 件)
Jakob B. Nielsen
2020 年 3 月 10 日
There are probably people out there much smarter than me, so take this with a grain of salt.
If it were me, I would choose that my "main structure" should be a scalar structure - e.g. one simply called data. Inside this structure, you can then have multiple fields which can be other structures if you want, and each of these structures can be scalar or nonscalar as you choose. (You can also have cells, arrays, both of character and double, within all of these substructures). The primary advantage here is that a simple
save('researchdata.mat','data');
Saves all your stuff. As well as that your workspace is not cluttered, since it only has the one variable.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Data Type Conversion についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!