how insert array in field struct
32 次查看(过去 30 天)
显示 更早的评论
采纳的回答
Vishnu
2023-7-13
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 个评论
Paul
2023-7-13
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
2023-7-16
编辑:Stephen23
2023-7-17
"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.
更多回答(2 个)
Stephen23
2023-7-13
编辑:Stephen23
2023-7-13
"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 个评论
Rahul
2023-7-13
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 个评论
Image Analyst
2023-7-13
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!