gpt4 book ai didi

matlab - 访问具有相似名称的多个结构中的值

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

我是 Matlab 的新手,一直在努力自学。我一直在寻找一个类似的问题,但找不到一个非常正确的问题。在我的工作区中,我有几个名称相似的结构。这些结构将始终以相同的单词('Base')开头,但名称的其余部分会发生变化('1'、'2'、'3'),例如 Base1Base2, Base3...等这些变量是在图中使用数据游标工具生成的,所以包含字段Target, 位置DataIndex。我只对 Base*.Position(1,1) 中的值感兴趣。我想从每个结构中提取这个值,次数与结构的数量一样多(在一个实例中可能有 6 个结构,另一次只有 4 个)。我正在考虑使用 eval 函数,但它似乎适用于精确的字符串,而不仅仅是名称的第一部分。此外,很多文档似乎都建议不要使用 eval。到目前为止,我有:

clearvar except 'Base*'

list_variables=who;

for i=1:length(list_variables)

BaseTS(i) = eval('Base1.Position(1,1)');

end

这是我坚持使用的 for 循环,因为我不知道如何概括,所以它将为每个不同的结构名称提取值 .Position(1,1)。提前致谢

最佳答案

与其拥有许多称为 Base1Base2 等的结构,不如将您的结构放在一个数组中。那么您可以调用 Base(1).Position(1,1)Base(2).Position... 等。您的代码将更加灵活和易于管理这边走。

所以我建议当您使用数据游标导出时,导出到一个名为 Base_temp 的变量,然后立即将其粘贴到数组的下一个元素中:

Base(end+1) = Base_temp

甚至:

Position(end+1) = Base_temp.Position(1,1);

那么每次用数据游标导出后按上回车就可以了。

你读到的关于避免 eval 的内容是正确的,eval 很少(如果有的话)是个好主意。它使您的代码难以阅读并且很难调试。但是既然你在学习,这就是你修复循环的方法。 (但是不要这样做,真的不要,而是使用数组):

for i=1:length(list_variables)
BaseTS(i) = eval(['Base', num2str(i), '.Position(1,1)']);
end

换句话说,使用字符串连接来构建字符串并使用循环变量 (i) 来获取不同的数字。您需要 num2str 将数字转换为字符串。但是不要这样做。这是一个糟糕的方法。

关于matlab - 访问具有相似名称的多个结构中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22989714/

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