如何在“结构”子索引中使用 FOR 循环? - MATLAB

Posted

技术标签:

【中文标题】如何在“结构”子索引中使用 FOR 循环? - MATLAB【英文标题】:How to use a FOR loop in a 'struct' subindex? - MATLAB 【发布时间】:2020-05-19 00:09:58 【问题描述】:

我有一个如图所示的结构,我需要寻址 FOR 循环中的一列,如图所示。但我不断收到此错误:

没有为“struct”类的值定义函数“subsindex”。

analisa_arx_teste 中的错误(第 351 行)

就我而言,我想要的是:第 1 行代表 i = 1,第 2 行 i =2;因此,对于特征,当我要求 pref_estemod(i).features 时,是从与每个模型关联的字段特征中获取值。

我刚刚开始使用 matlab 编程,因此我们将不胜感激。

谢谢!

for i=pref_estemod(1:npreferred)

[m,n]=size(Training);

features=(pref_estemod(1,i).features);

end

【问题讨论】:

为什么eval() .? 没有必要。我把它取下来了,但错误是一样的。 Im cmd 我可以输入,例如 pref_estemod(1,1) 并且它工作正常,但不适用于索引:/ 你能显示包含for循环的代码吗? 当然,我很抱歉。已编辑! 你到底想要i=pref_estemod(1:npreferred) 是什么意思?直到 n 的整数序列(在这种情况下,您需要 i=1:n)或其他? (如果是其他问题,请在问题中进行编辑。) 【参考方案1】:

错误在于i=pref_estemod(1:npreferred)

如果您打算使用i 进行索引,则语法为for i=1:npreferred

1:npreferred 本身扩展为水平数组[1,2,...,npreferred]= 带有前导 for 是一种特殊的语法组合。这意味着使用i=1i=2、...、i=npreferred 执行以下代码。现在我相信你已经知道for 循环背后的想法了。我写这一切的原因是给你以下警告/建议。不要期望相同的语法适用于非数字数组。因为它在某些情况下有效,而在其他情况下无效。

【讨论】:

“在某些情况下有效,在其他情况下无效”是什么意思? for a=A 始终以相同的方式工作:循环的每次迭代使用 A 的不同列。 @CrisLuengo:我似乎有a 采用整个数组A 的值的情况。所以就是这个意思。如果我没记错的话,它是一个字符串数组。版本是2019a。我没有这个例子了。 (事后看来,我当时应该用这个例子问一个 SO 问题。) @Agryll:如果数组是列向量,那么只有一列可以迭代。我敢打赌,这就是你所看到的。 @CrisLuengo:只要记忆犹新,我从不使用列向量进行迭代。为了模仿 x:y:z 语法的输出,我可能做出了这个奇怪的决定。但我会记住你提到的未来可能性。

以上是关于如何在“结构”子索引中使用 FOR 循环? - MATLAB的主要内容,如果未能解决你的问题,请参考以下文章

无法将结构从非托管库编组到单触引中的托管代码

Matlab是如何实现高效的子索引的?

NumPy:在子矩阵/块和相应的行、列索引中找到最小值

如何仅使用for循环在matlab中裁剪图像? [复制]

在VB中,如何强制退出循环结构

如何在 Rails 中设置没有特定父 ID 的子索引路径?