Conversion of cell array into individual object
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Rajan Patel
am 11 Sep. 2020
Kommentiert: André Galera
am 27 Okt. 2020
I have 324*231 cell array M.
- M(2:end,1) includes names of countries
- M(2:end,2) includes names of respective states
- M(2:end,3:end) includes some data ( each in {1*2 double} ).
I want to make individual object of each country which contain their states which contain their respective data. So, sort of three level hierarchy.How should I initiate?
Thanks.
0 Kommentare
Akzeptierte Antwort
Ameer Hamza
am 11 Sep. 2020
Bearbeitet: Ameer Hamza
am 11 Sep. 2020
What about using a struct to save data hierarchically. For example
M = [{"C1"; "C1"; "C2"; "C3"; "C3"; "C3"}, ...
{"S1"; "S2"; "S1"; "S1"; "S2"; "S3"}, ...
num2cell(rand(6,3))];
countries = unique([M{:,1}]);
M1 = splitapply(@(x) {x}, M(:,2:end), findgroups([M{:,1}]).');
temp = [num2cell(countries); cell(size(countries))];
S = struct(temp{:});
for i=1:numel(countries)
country_data = M1{i};
for j=1:size(country_data, 1)
S.(countries(i)).(country_data{j,1}) = country_data(j, 2:end);
end
end
C1, C2, and C3 are country names, and S1, S2, and S3 are names of states within a specific country.
Run it like this
>> S.C1.S1 % displays the data for country=C1 and state=S1
ans =
1×3 cell array
{[5.2238e-04]} {[0.8013]} {[0.7386]}
5 Kommentare
Ameer Hamza
am 14 Sep. 2020
In this case, myObj < handle will have no difference in the output, but it is usually slower. The difference is that handle objects behave somewhat similarly to pointers in C or C++.
André Galera
am 27 Okt. 2020
Hello, there! This code is just what I needed as well! But I am getting an error. Could you help me? When I run your example, it works fine. But if I run with my cell array (also 324*321) I get the error showed in the image below. Thanks!
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Construct and Work with Object Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!