Numpy arange函数生成的变量的长度与其所依赖的变量的长度不同

2024-09-27 21:26:22 发布

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

我想做一个pyplot图,但是我的x和y值的长度不同

我使用numpy的arange函数根据y值列表的长度创建x值的范围

def event_editor(EventDatabase, ConcatenatedEvents, ConcatenatedFits):

    for i in list(EventDatabase):

        # Check for events with absurd blockage current

        if abs(EventDatabase[i]['AllLevelFits'][0]) > 5:
            del EventDatabase[i]
            continue
        event = ConcatenatedEvents[i][0]
        fit = ConcatenatedFits[i]
        x_values = np.arange(0, len(event) / 100, .01)
        x_values2 = np.arange(0, len(fit) / 100, .01)

        fig = plt.figure()
        plt.plot(x_values, event, figure=fig)
        plt.plot(x_values2, fit, figure=fig)
        plt.xlabel('Time (ms)', figure=fig)
        plt.ylabel('Current (I)', figure=fig)
        plt.title('Event #' + str(i), figure=fig)
        plt.show()

我希望x_valuesevent/fit列表具有相同的长度,而且大多数情况下它们具有相同的长度。但是,当event/fit的长度为111时,x_values的长度为112,这是什么原因造成的


Tags: event列表forlenplotnpfigplt
1条回答
网友
1楼 · 发布于 2024-09-27 21:26:22

这是由于Python/NumPy中的float近似。 这种不一致的行为也记录在官方的docs

更可靠的方法是使用:np.linspace()例如:

step = 0.01
np.arange(0, len(event) / 100, step)
np.arange(0, len(fit) / 100, step)

例如,变成:

step = 0.01
N = int(max(len(event) / 100 / step, len(fit) / 100 / step))

np.linspace(0, len(event) / 100, N)
np.linspace(0, len(fit) / 100, N)

请注意,使用np.linspace()可以指定点数,而不是将step指定为最后一个参数

相关问题 更多 >

    热门问题