я в настоящее время реализовать 2D сюжет, который должен использоваться связать эти два значения визуальной «пейзаж»:Обработка больших длинных значений в Matplotlib
- оси х: огромные двоичные дискретные значения с длиной до до 3000 знаков (2^3000)
- у оси: вычисленное значение (без проблем)
кажется, что 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()
Я получаю следующее сообщение об ошибке:
OverflowError: long int too large to convert to float
Кто-нибудь идея?
Интересно, что numpy также не может обрабатывать большие числа: np.log10 (pow (2,2000)) -> AttributeError: у объекта long нет атрибута 'log10', тогда как математика pythons может это сделать , – Robin