how insert array in field struct
39 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
shamal
el 13 de Jul. de 2023
Z is matrix number
for i=1:width(A)
A(i).b=z(:,i)
end
it's possibile to avoid loop?
0 comentarios
Respuesta aceptada
Vishnu
el 13 de Jul. de 2023
Yes, it is possible to avoid the loop and achieve the same result using matrix operations in MATLAB using the following snippet
% Assuming A is a structure array and z is a matrix
z = [1 2 3; 4 5 6; 7 8 9]; % Example matrix
% Convert z to a cell array of column vectors
zCell = mat2cell(z, size(z, 1), ones(1, size(z, 2)));
% Assign the columns of z to the field b of A using comma-separated lists
[A.b] = zCell{:};
A.b
3 comentarios
Paul
el 13 de Jul. de 2023
Is this a better way, at least for the case where A does not already exist. I think it will also work if A already exists.
z = [1 2 3; 4 5 6; 7 8 9]; % Example matrix
zCell = mat2cell(z, size(z, 1), ones(1, size(z, 2))); % or use num2cell(z,1)
[A(1:size(z,2)).b] = zCell{:};
A.b
Stephen23
el 16 de Jul. de 2023
Editada: Stephen23
el 17 de Jul. de 2023
"Is this a better way, at least for the case where A does not already exist."
In that case STRUCT would be simpler and makes the intent much clearer.
"I think it will also work if A already exists."
In that case fiddling around with linear/subscript indexing on the LHS is not required.
Más respuestas (2)
Stephen23
el 13 de Jul. de 2023
Editada: Stephen23
el 13 de Jul. de 2023
"it's possibile to avoid loop?"
Does A already exist or not? Your question does not make this clear... here are both cases:
Z = [1,2,3; 4,5,6; 7,8,9]
C = num2cell(Z,1);
A = struct('a',C) % structure does not exist
[A.b] = C{:} % structure already exists
Checking:
A.b
Read more:
0 comentarios
Rahul
el 13 de Jul. de 2023
Hi Luca,
This is possible. You can try out the following code for same.
A = struct('b', cell(1, width(A))); % Preallocate struct array
% Assign columns of z to the field 'b' of each struct element in A
[A.b] = deal(z);
Here deal(z) is used to assign each column of z to the corresponding field b in each struct element of A. This way, you can avoid the need for a loop and achieve the desired assignment efficiently.
Make sure that the number of columns in z matches the number of elements in A (i.e., width(A) or numel(A)).
Hope this helps.
Thanks.
3 comentarios
Image Analyst
el 13 de Jul. de 2023
It's not clear if you want
- an array of structures (82 A's) with each structure having one field "b" which is a column vector of 82 elements, OR
- if you want a single structure (one A, not an array of 82 of them) and that one structure has a single field which is an 82 element column vector.
Your initial code seems to indicate 1 -- an array of structures, but is that really true?
Why do you want to avoid the loop anyway? With a microscopic data size like 82, a for loop may well be faster than messing around with inefficient cell arrays. Either way will be so fast you won't be able to perceive a difference between them anyway.
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!