How to convert a structure into a individual double elements

481 vues (au cours des 30 derniers jours)
Artu
Artu le 25 Juin 2012
Commenté : Talha le 28 Déc 2023
Hello all,
I have a structure containing ten "8760x1 double" I need to do some descriptive statistical analysis for each group of data. I want to convert this structure into ten dettached differents elements. How can I do this? I have tried struct2cell and I get one 10x1 cell but then I don't know how to dettach each group of data out of this.
Thanks for your help!

Réponse acceptée

Image Analyst
Image Analyst le 25 Juin 2012
Why not just simply do
vector1 = yourStruct.vector1;
vector2 = yourStruct.vector2;
vector3 = yourStruct.vector3;
vector4 = yourStruct.vector4;
vector5 = yourStruct.vector5;
vector6 = yourStruct.vector6;
vector7 = yourStruct.vector7;
vector8 = yourStruct.vector8;
vector9 = yourStruct.vector9;
vector10 = yourStruct.vector10;
which is very easy, intuitive, and straightforward?
  1 commentaire
T Path
T Path le 12 Déc 2015
I had a bit of a rough time loading data from a .mat file. This method works like a charm.

Connectez-vous pour commenter.

Plus de réponses (6)

grapevine
grapevine le 25 Juin 2012
there are different ways to sort out your issue
you might use:
C= struct2cell(s)
and then
A= cell2mat(C)
another way is to write a small code with a loop to copy all the elements of the structure in an array, for example
s = struct('f1', [1, 3, 2, 4])
a=[]
lenS=length(s.f1)
for i=1:1:lenS
a=[ a s(f1)]
end
good luck

Andrei Bobrov
Andrei Bobrov le 25 Juin 2012
Try this is code
A = struct2cell(yourstructdata);
out = cat(2,A{:});
  3 commentaires
burak enes
burak enes le 14 Mar 2023
super duber solution
Talha
Talha le 28 Déc 2023
best

Connectez-vous pour commenter.


Irwansyah Ramadhani
Irwansyah Ramadhani le 5 Juin 2016
I have a struct 2x1 and I want to write it's contain to excel directly. So, I want to ask the way to do it. Thank you
  1 commentaire
Image Analyst
Image Analyst le 5 Juin 2016
Call xlswrite for each member of the structure. You have to get a numerical array or a cell array of strings. If you don't know how to do that then tell us what the structure of your structure is.
Also, you might read this: the FAQ

Connectez-vous pour commenter.


Mayss Aliyeh
Mayss Aliyeh le 19 Mai 2017
What if in the struct I have 7 fields, and all of them are different sizes of doubles? I want to use them for the svmtrain. How can I solve my problem?

Mark Brandon
Mark Brandon le 5 Déc 2017
Consider a struct A, with fields a and b, each with a column of elements. You can convert the fields into column vectors using the following:
aVec = [A.a(:)] bVec = [A.b(:)]

Mohammad Basil
Mohammad Basil le 23 Mar 2021
Question
How to change struct 1x2 to double 1x1?
  4 commentaires
Image Analyst
Image Analyst le 24 Mar 2021
Yes, but note that s1 and s2 are still structures, not a double 1x1:
s = struct('f1', {5;6}, 'f2', {'aaa'; 'bbb'})
whos s
s1 = s(1)
s2 = s(2)
whos s1
s =
2×1 struct array with fields:
f1
f2
Name Size Bytes Class Attributes
s 2x1 572 struct
s1 =
struct with fields:
f1: 5
f2: 'aaa'
s2 =
struct with fields:
f1: 6
f2: 'bbb'
Name Size Bytes Class Attributes
s1 1x1 350 struct
Now if you wanted one of the doubles that is in one of the fields of one of the structures in the structure array, say the 5 from the f1 field of the first structure, you could do
% Pull out the 5 from the f1 field of the first structure in the array of structures.
scalarDouble = s(1).f1
whos scalarDouble
scalarDouble =
5
Name Size Bytes Class Attributes
scalarDouble 1x1 8 double
Stephen23
Stephen23 le 24 Mar 2021
Modifié(e) : Stephen23 le 25 Mar 2021
"How to change struct 1x2 to double 1x1?"
Clearly this is a MATLAB riddle, which is rather nice. One solution is:
'struct 1x2'
ans = 'struct 1x2'
ans(:) = ans-[15,5,-3,19,-9,15,0,0,0,1]
ans = 'double 1x1'
Note how it changes the data, exactly as requested. CODY enthusiasts can add their own solutions.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by