how insert array in field struct
21 ビュー (過去 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 で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
