我目前实现了一个二维绘图,用于将这两个值与视觉“景观”联系起来:
matplotlib似乎无法处理如此巨大的值。 因为它代表一个景观,价值本身并不重要。重要的是函数本身的可视化表示。 我试着记录这些值,但没有解决问题。这是当前代码:
import numpy as np
import matplotlib.pyplot as plt
'''
convert binary list to gray code to maintain hamming distance
'''
def indtogray(self, ind):
return ind[:1] + [i ^ ishift for i, ishift in zip(ind[:-1], ind[1:])]
'''
Create int from gray value
'''
def graytoint(self, gray):
i = 0
for bit in gray:
i = i*2 + bit
return i
'''
Create example list of binary lists
'''
def create(self, n, size):
return [[np.random.randint(2) for _ in range(size)] for _ in range(n)]
def showPlot(self, toolbox, neval):
individuals = self.create(100, 2000)
fitnesses = map(np.sum, individuals)
fig,ax = plt.subplots()
values = map(self.graytoint, map(self.indtogray, individuals))
full = zip(*sorted(zip(values, fitnesses)))
line = ax.plot(full[0], full[1], 'r-')
plt.show()
if __name__ == '__main__':
show()
我得到以下错误:
^{pr2}$有什么主意吗?在
这个错误仅仅意味着你的数字太大了,它不能把它转换成浮点。你能做的就是取x的对数
现在,如果您有多达3000个二进制数字,这意味着最大的十进制数是
pow(2,3000)
。如果您使用log(pow(2,3000)
,您应该得到2079.44154~然后您应该能够将其转换为float。我要再检查一下你的数字是否是二进制格式,但用十进制表示。意思是如果x[0] = 10
,确保它是10,而不是二进制中的2。否则,二进制格式的2^3000数字将非常大。在相关问题 更多 >
编程相关推荐