无法加载 numpy 数组,它们在 python 中显示 pickle 数据错误

Trouble loading numpy array where they show pickle data error in python

我可以使用 Numpy 成功保存和加载小型数组。现在我使用 np.save('array.npy')

保存下面的数组
[0, 100, 0, 5, 10, 15, 20, 25, 30, 25, 20, 15, 10, 5, 0]

当我尝试使用 np.load('array.npy') 加载时,它显示以下错误:

    raise ValueError("Cannot load file containing pickled data "
ValueError: Cannot load file containing pickled data when allow_pickle=False

如果我尝试通过添加 allow_pickle=True 来解决它,那么它会显示以下错误:

    raise IOError(
OSError: Failed to interpret file 'array.npy' as a pickle

真是处境艰难。请指教! :(

我指的代码如下:

def recv():
    import socket
    import time
    import numpy as np

    TCP_IP = "0.0.0.0"
    BUFFER_SIZE = 20  # Normally 1024, but we want fast response

    # receiving CAN frame payload
    TCP_PORT = 5003
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind((TCP_IP,TCP_PORT))
    s.listen(1)
    conn,addr = s.accept()
    while 1:
        data1 = conn.recv(BUFFER_SIZE)
        if not data1: break
        datalist = list(data1)
        print("CAN payload: %s" % datalist)
        conn.send(data1)  # echo
    conn.close()
    time.sleep(2)
    # ------------------------------------------------------------
    # assembling CAN frame
    from can import Message
    can_msg = Message(is_extended_id=bool(datalist[0]),arbitration_id=datalist[1],data=datalist[2:])

    # printing all received payloads
    print("CAN frame: ",can_msg)
    print("Vehicle speed: ",datalist[2:])

    # Saving all received payloads
    np.save('array.npy',datalist[2:])  # save


def EPS_process():
    # EPS process for Right turn, high speed
    import numpy as np

    print("Starting EPS process")
    speed_array = np.load('array.npy')  # load

那个数组应该不会给你带来任何问题:

In [1]: arr = np.array([0, 100, 0, 5, 10, 15, 20, 25, 30, 25, 20, 15, 10, 5, 0])
In [2]: arr
Out[2]: 
array([  0, 100,   0,   5,  10,  15,  20,  25,  30,  25,  20,  15,  10,
         5,   0])
In [3]: np.save('test.npy',arr)
In [4]: np.load('test.npy')
Out[4]: 
array([  0, 100,   0,   5,  10,  15,  20,  25,  30,  25,  20,  15,  10,
         5,   0])

好的,我想分享解决问题的方法。所以基本上 @hpaulj 建议对于多个进程,读取可能会在保存完成之前开始。所以我在 speed_array = np.load('array.npy')

之前添加了 3 秒的延迟

这为 NumPy 数组提供了足够的时间来保存,然后我才能再次读取。否则,它将读取先前保存的数组并因此读取 pickle 错误。