如何在Matlab中矢量化对子结构的访问?

时间:2017-02-15 22:46:53

标签: matlab data-structures vectorization matlab-struct

我先回答问题,然后再提供一些支持信息:

假设我有以下内容:

motor(1).Voltage = 96.2;
motor(2).Voltage = 48.0;

processingStation(1).FeedstockMotor.Voltage = 96.2;
processingStation(2).FeedstockMotor.Voltage = 48.0;

以下给出了所有电机电压:

[motor.Voltage]

这不会给出所有电机电压:

[processingStation.FeedstockMotor.Voltage]

第一个输出[motor.Voltage]给出了结构中所有电机的电压。如何在其他情况下获得相同的功能,我试图在所有Voltage中比较FeedstockMotor的{​​{1}}值?

我意识到我可以重命名字段processingStation并获得相同的功能,但如果放电电机具有类似的配置,那么我可以轻松设置默认电机,具有类似:

FeedstockMotor_Voltage
等等,然后我可以轻松分配:

defaultMotor.Voltage = 48.0;
defaultMotor.Torque = 100;

我想拥有一小部分允许的电机,能够为这些电机设置非常详细的配置,然后才能使用它们。

我还希望能够分割各个部分,这样我就可以快速获得可视趋势或其他HMI显示的操作扭矩,电压等列表。我宁愿不必遍历所有processingStation(1).FeedstockMotor = defaultMotor; 元素来获取我需要的数据。

1 个答案:

答案 0 :(得分:1)

您需要先将processingStation.FeedstockMotor转换为结构数组,然后才能访问结果数组的Voltage字段。

tmp = [processingStation.FeedstockMotor];
result = [tmp.Voltage];

我的路径上有一个函数,允许我实际访问这些子结构,就像这样

function output = rgetfield(S, field)
    % Split the fieldname on "."
    parts = regexp(field, '\.', 'once', 'split');

    output = [S.(parts{1})];

    if numel(parts) > 1
        % If there are more parts, recursively get them
        output = rgetfield(output, parts{2});
    end
end

然后您可以使用此功能,如

values = rgetfield(processingStation, 'FeedstockMotor.Voltage');