我在网上搜索到的所有对这个错误的引用都完全不适用于我的情况,它们处理的是某种涉及点的变量,比如a.b
(换句话说,结构),而我严格使用数组。没有任何东西涉及点,我的代码也没有询问它。
好的,我有一个名为tier2comparatorconnectionpoints
. 它是一个大小为 400×10×20×10 的 4 维数组。考虑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
。
现在,为了避免内存不足,我有tier2comparatorconnectionpoints
as type int8
,不幸的是,在我可怕的代码量中的某个时刻,我double
在用它做数学运算时忘记将它转换为 a ,并且出现舍入错误涉及将其与 a 相乘,rand
最终导致tier2comparatorconnectionpoints
其输入的某些值4
超出了允许的值。
它允许的值是 1 到tier1numcomparators(counter,counter2)
, 有界到40
, 41
through 40+tier2numcomparators(counter,counter2)
, 有tier2numcomparators(counter,counter2)
界到20
, 和61
through 60+tier2numcomparators(counter,counter2)
, 因此它不允许超过,80
因为tier2numcomparators(counter,counter2)
有界到20
并且不允许超过60+tier2numcomparators(counter,counter2)
, 但它也不是允许小于40
但大于tier1numcomparators(counter,counter2)
,不允许小于60
但大于40+tier2numcomparators(counter,counter2)
。我意识到了这个问题,因为它被设置在81
某个地方。
顺便说一句,这是一个进化模拟,它是模拟生物的自然选择。我需要寻找代码中允许的值tier2comparatorconnectionpoints
超过允许值的部分。但这是一个单独的问题。
对我的数据进行临时修复,以使其至少符合其允许的值,即设置大于tier1numcomparators(counter,counter2)
但小于40
to的任何内容,设置大于但小于totier1numcomparators(counter,counter2)
的任何内容,并设置任何大于to 的东西。我第一次发现这个问题是因为它被设置为,所以它不只是超过,它超过了,被限制为。40+tier2numcomparators(counter,counter2)
60
40+tier2numcomparators(counter,counter2)
60+tier2numcomparators(counter,counter2)
60+tier2numcomparators(counter,counter2)
81
60+tier2numcomparators(counter,counter2)
60+20
tier2numcomparators
20
我希望这不是太多的信息,但我觉得可能有必要让您了解这些变量的类型。
因此,在我尝试至少将数据转换为有效数据时,我做了以下事情:
for counter=1:size(tier2comparatorconnectionpoints,1)
for counter2=1:size(tier2comparatorconnectionpoints,2)
for counter3=1:size(tier2comparatorconnectionpoints,3)
for counter4=1:size(tier2comparatorconnectionpoints,4)
if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)>60+tier2numcomparators(counter,counter2)
tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)=60+tier2numcomparators(counter,counter2);
end
end
end
end
end
这工作得很好。接着:
for counter=1:size(tier2comparatorconnectionpoints,1)
for counter2=1:size(tier2comparatorconnectionpoints,2)
for counter3=1:size(tier2comparatorconnectionpoints,3)
for counter4=1:size(tier2comparatorconnectionpoints,4)
if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)>40+tier2numcomparators(counter,counter2)
if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)<60
tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)=40+tier2numcomparators(counter,counter2);
end
end
end
end
end
end
这就是它说“尝试引用非结构数组的字段”的地方。