我在网上搜索到的所有对这个错误的引用都完全不适用于我的情况,它们处理的是某种涉及点的变量,比如a.b(换句话说,结构),而我严格使用数组。没有任何东西涉及点,我的代码也没有询问它。
好的,我有一个名为tier2comparatorconnectionpoints. 它是一个大小为 400×10×20×10 的 4 维数组。考虑tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)。
counter是一个数1,400counter2是一个数字1,numchromosomes(counter)并且numchromosomes(counter1)必然是10,counter3是一个数字1,tier2numcomparators(counter,counter2)而它又是有界的20。counter4是一个数字1,tier2inputspercomparator(counter,counter2,counter3)它有界到10。
现在,为了避免内存不足,我有tier2comparatorconnectionpointsas type int8,不幸的是,在我可怕的代码量中的某个时刻,我double在用它做数学运算时忘记将它转换为 a ,并且出现舍入错误涉及将其与 a 相乘,rand最终导致tier2comparatorconnectionpoints其输入的某些值4超出了允许的值。
它允许的值是 1 到tier1numcomparators(counter,counter2), 有界到40, 41through 40+tier2numcomparators(counter,counter2), 有tier2numcomparators(counter,counter2)界到20, 和61through 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)但小于40to的任何内容,设置大于但小于totier1numcomparators(counter,counter2)的任何内容,并设置任何大于to 的东西。我第一次发现这个问题是因为它被设置为,所以它不只是超过,它超过了,被限制为。40+tier2numcomparators(counter,counter2)6040+tier2numcomparators(counter,counter2)60+tier2numcomparators(counter,counter2)60+tier2numcomparators(counter,counter2)8160+tier2numcomparators(counter,counter2)60+20tier2numcomparators20
我希望这不是太多的信息,但我觉得可能有必要让您了解这些变量的类型。
因此,在我尝试至少将数据转换为有效数据时,我做了以下事情:
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
这就是它说“尝试引用非结构数组的字段”的地方。