我可以在网上搜索的所有对此错误的引用完全不适用于我的情况,他们正在处理涉及点的某些变量,例如a.b
(结构换言之),而我正在严格使用阵列。没有任何内容涉及到点,我的代码也没有涉及它。
好的,我有一个名为tier2comparatorconnectionpoints
的GINORMOUS阵列。它是尺寸为400×10×20×10的4-D阵列。考虑tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)
。
counter
是一个1
到400
,counter2
是一个1
到numchromosomes(counter)
的数字,numchromosomes(counter1)
绑定到10
,counter3
是一个1
到tier2numcomparators(counter,counter2)
的数字,后面依次为20
。counter4
是一个1
到tier2inputspercomparator(counter,counter2,counter3)
的数字,其范围为10
。现在,所以我没有用完RAM,我tier2comparatorconnectionpoints
类型为int8
,而且在我可怕的代码量中有点不可思议,我忘了把它投入到double
当我使用它进行数学计算时,将其与rand
相乘的舍入误差最终会导致tier2comparatorconnectionpoints
的某些4
输入值超过它被允许。
允许的值为1到tier1numcomparators(counter,counter2)
,其范围为40
,41
到40+tier2numcomparators(counter,counter2)
,tier2numcomparators(counter,counter2)
限制为{ {1}}和20
到61
,因此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)
,超过81
,60+tier2numcomparators(counter,counter2)
被限制为{{1} }}
我希望这不是太多的信息,但我觉得可能有必要让你了解这些变量是什么类型。
因此,在尝试至少将数据转换为有效数据时,我做了以下内容:
60+20
这很好用。然后:
tier2numcomparators
这就是它所说的“尝试引用非结构数组的字段”。
答案 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