在matplotlib中处理大的长值

2024-05-14 19:49:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前实现了一个二维绘图,用于将这两个值与视觉“景观”联系起来:

  • x轴:巨大的二进制离散值,长度可达 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()

我得到以下错误:

^{pr2}$

有什么主意吗?在


Tags: inselfmapforreturnmatplotlibdefnp
1条回答
网友
1楼 · 发布于 2024-05-14 19:49:05

这个错误仅仅意味着你的数字太大了,它不能把它转换成浮点。你能做的就是取x的对数

现在,如果您有多达3000个二进制数字,这意味着最大的十进制数是pow(2,3000)。如果您使用log(pow(2,3000),您应该得到2079.44154~然后您应该能够将其转换为float。我要再检查一下你的数字是否是二进制格式,但用十进制表示。意思是如果x[0] = 10,确保它是10,而不是二进制中的2。否则,二进制格式的2^3000数字将非常大。在

相关问题 更多 >

    热门问题