gpt4 book ai didi

matlab - 是否可以在不使用 for 循环的情况下访问/修改此结构的值?

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:28 24 4
gpt4 key购买 nike

这是我的初始结构数组:

A(1).B.C = 'a';
A(2).B.C = 'b';
A(3).B.C = 'a';
A(4).B.C = 'a';

我想根据 Values 的值和 IndexingArray 的索引更改字段 C 的值:

Values = {'a', 'b'};
IndexingArray = [1 1 0 1];

所以,我的新结构数组将是:

A(1).B.C = 'b';
A(2).B.C = 'b';
A(3).B.C = 'a';
A(4).B.C = 'b';

有没有不用 for 循环的方法?

最佳答案

可以使用 deal 不循环地执行此操作和 comma separated list语法,但它可能看起来有点难以阅读:

% Initialize A:
A(1).B.C = 'a';
A(2).B.C = 'b';
A(3).B.C = 'a';
A(4).B.C = 'a';
Values = {'a', 'b'};
IndexingArray = [1 1 0 1];

temp = [A.B]; % Structure array containing B substructures
[temp.C] = deal(Values{IndexingArray+1}); % Set field C of each structure element
temp = num2cell(temp); % Convert to a cell array of 1-by-1 structures
[A.B] = deal(temp{:}); % Update B substructures

在较新版本的 MATLAB 中,您可以省略 deal一共:

temp = [A.B];
[temp.C] = Values{IndexingArray+1};
temp = num2cell(temp);
[A.B] = temp{:};

这应该允许您更新 BC 字段,而不会影响更复杂结构中可能存在的任何其他字段。

关于matlab - 是否可以在不使用 for 循环的情况下访问/修改此结构的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42994921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com