如何在 Matlab 中矢量化对子结构的访问?
How can I vectorize access to substructures in Matlab?
我先跳到问题,然后是一些支持信息:
假设我有以下内容:
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]
为我提供了结构中所有电机的电压。在另一种情况下,我如何获得相同的功能,我正在尝试比较所有 processingStation
中 FeedstockMotor
的 Voltage
值?
我意识到我可以重命名该字段 FeedstockMotor_Voltage
并获得相同的功能,但如果放电电机具有一组相似的配置,那么我可以轻松设置默认电机,其内容如下:
defaultMotor.Voltage = 48.0;
defaultMotor.Torque = 100;
等等,然后我就可以做简单的作业了:
processingStation(1).FeedstockMotor = defaultMotor;
我想要一个非常小的允许电机子集,能够为这些电机设置非常详细的配置,然后能够使用它们。
我还希望能够切分各个部分,这样我就可以快速获得工作扭矩、电压等的列表,用于视觉趋势或其他 HMI 显示。我宁愿不必遍历所有 processingStation
元素来获取我需要的数据。
您需要先将 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');
我先跳到问题,然后是一些支持信息:
假设我有以下内容:
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]
为我提供了结构中所有电机的电压。在另一种情况下,我如何获得相同的功能,我正在尝试比较所有 processingStation
中 FeedstockMotor
的 Voltage
值?
我意识到我可以重命名该字段 FeedstockMotor_Voltage
并获得相同的功能,但如果放电电机具有一组相似的配置,那么我可以轻松设置默认电机,其内容如下:
defaultMotor.Voltage = 48.0;
defaultMotor.Torque = 100;
等等,然后我就可以做简单的作业了:
processingStation(1).FeedstockMotor = defaultMotor;
我想要一个非常小的允许电机子集,能够为这些电机设置非常详细的配置,然后能够使用它们。
我还希望能够切分各个部分,这样我就可以快速获得工作扭矩、电压等的列表,用于视觉趋势或其他 HMI 显示。我宁愿不必遍历所有 processingStation
元素来获取我需要的数据。
您需要先将 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');