【问题标题】:How can I unserialize a numpy array that was cast to a bytestring?如何反序列化转换为字节串的 numpy 数组?
【发布时间】:2015-06-07 19:47:14
【问题描述】:

我需要将一个 numpy 数组序列化为一些与 JSON 兼容的形式。由于我使用的框架不允许我访问 JSON 编码器/解码器对象,因此我将一个 numpy 数组序列化为可以然后编组为 JSON 的东西。我选择了array.tobytesarray.tostring(两者似乎本质上是一样的)。

以下是说明我的问题的示例:

import numpy as np

a = np.random.rand(1024, 1024)  # create array of random values
b = array.tobytes()  # serialize array
a2 = np.fromstring(b)

当我检查a2 的值时,我发现它只包含原始a 的第一行。换句话说,a2 == a[0, :]

如何解码整个数组?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    实际上 numpy.fromstring() 返回一个 1024X1024 的一维数组,而不是一个二维数组,你需要做的就是重塑为 1024X1024,

    试试这个:-

    import numpy as np
    a = np.random.rand(1024, 1024)  # create array of random values
    b = array.tobytes()
    np.fromstring(b).reshape(1024,1024)
    

    【讨论】:

    • 谢谢!有没有办法在序列化时保留形状信息?我不能指望反序列化端知道关于数组维度的任何信息先验
    • 不幸的是,没有,您可能可以为相同的 numpy 编写一个包装类,并在反序列化结束时也可能使用该类,我真的不知道更清洁的方法。
    • 更清洁的解决方案:stackoverflow.com/questions/30698004/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2018-11-10
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多