matlab错误,尝试引用非结构数组的字段

时间:2013-09-19 14:42:29

标签: arrays matlab

我可以在网上搜索的所有对此错误的引用完全不适用于我的情况,他们正在处理涉及点的某些变量,例如a.b(结构换言之),而我正在严格使用阵列。没有任何内容涉及到点,我的代码也没有涉及它。

好的,我有一个名为tier2comparatorconnectionpoints的GINORMOUS阵列。它是尺寸为400×10×20×10的4-D阵列。考虑tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)

  • counter是一个1400
  • 的数字
  • counter2是一个1numchromosomes(counter)的数字,numchromosomes(counter1)绑定到10
  • counter3是一个1tier2numcomparators(counter,counter2)的数字,后面依次为20
  • counter4是一个1tier2inputspercomparator(counter,counter2,counter3)的数字,其范围为10

现在,所以我没有用完RAM,我tier2comparatorconnectionpoints类型为int8,而且在我可怕的代码量中有点不可思议,我忘了把它投入到double当我使用它进行数学计算时,将其与rand相乘的舍入误差最终会导致tier2comparatorconnectionpoints的某些4输入值超过它被允许。

允许的值为1到tier1numcomparators(counter,counter2),其范围为404140+tier2numcomparators(counter,counter2)tier2numcomparators(counter,counter2)限制为{ {1}}和2061,因此60+tier2numcomparators(counter,counter2)限制为80并且不允许tier2numcomparators(counter,counter2),因此不允许超过20超过60+tier2numcomparators(counter,counter2),但也不允许小于40但大于tier1numcomparators(counter,counter2)且不允许小于60但大于{{1} }}。我意识到了这个问题,因为它被设置为40+tier2numcomparators(counter,counter2)某处。

这是一种进化模拟,它是模拟生物的自然选择。我需要搜索允许81的值超出允许值的代码部分。但这是一个单独的问题。

我的数据的临时修复,只是为了使其至少符合其允许的值,是将任何大于tier2comparatorconnectionpoints但小于tier1numcomparators(counter,counter2)的内容设置为{{1设置大于40但小于tier1numcomparators(counter,counter2)40+tier2numcomparators(counter,counter2)的任何内容,并将大于60的任何内容设置为40+tier2numcomparators(counter,counter2)。我首先发现了这个问题,因为它被设置为60+tier2numcomparators(counter,counter2),所以它不会超过60+tier2numcomparators(counter,counter2),超过8160+tier2numcomparators(counter,counter2)被限制为{{1} }}

我希望这不是太多的信息,但我觉得可能有必要让你了解这些变量是什么类型。

因此,在尝试至少将数据转换为有效数据时,我做了以下内容:

60+20

这很好用。然后:

tier2numcomparators

这就是它所说的“尝试引用非结构数组的字段”。

1 个答案:

答案 0 :(得分:5)

TBH听起来好像你输了一个拼写错误并把.放在某个地方?否则请发布整个错误,因为它可能发生在不同的函数或其他东西。

无论哪种方式,你都不需要所有那些for循环,它更简单,通常更快(并且应该绕过你的错误):

首先replicate您的tier2numcomparators矩阵,使其尺寸与tier2comparatorconnectionpoints相同

T = repmat(tier2numcomparators + 40, 1, 1, size(tier2comparatorconnectionpoints, 3), size(tier2comparatorconnectionpoints, 4));

现在,您只需一次性创建符合条件的逻辑矩阵:

ind = tier2comparatorconnectionpoints > T | tier2comparatorconnectionpoints < 60;

最后使用logical indexing设置您想要的元素:

tier2comparatorconnectionpoints(ind) = T(ind);

如果速度很慢或内存过多,您可以使用bsxfun代替repmat