【问题标题】:How to store numpy.ndarray on DynamoDB?如何在 DynamoDB 上存储 numpy.ndarray?
【发布时间】:2019-07-08 19:02:55
【问题描述】:

当我调用face_encodings 函数时,我有这个numpy.ndarray@ageitgey's facial_recognition Python library 生成。我需要将这些数据保存到亚马逊的 DynamoDB;但我不确定如何。

我在运行face_encodings 函数时得到的numpy.ndarray 是来自给定图像的人脸的表示。我可以使用这些数据与另一张图像进行比较,并检查该人(表示为编码)是否存在于该图像中。

我认为我可以将 numpy.ndarray 保存为二进制文件(使用 numpy.ndarray.tobytes,但我不确定如何将该二进制文件(当我从 DynamoDB 检索数据时)转换回 numpy.ndarray

我要比较的代码应该是这样的:

unknown_encoding = face_recognition.face_encodings(unknown_picture)[0]
# database_encoding_array should come from DynamoDB
results = face_recognition.compare_faces(database_encoding_array, unknown_encoding, tolerance=0.595)
# results is an array of booleans

总之,我不知道将numpy.ndarray 保存到 DynamoDB 的最佳方法是什么,以及以后如何查询它。

【问题讨论】:

    标签: python arrays numpy amazon-dynamodb numpy-ndarray


    【解决方案1】:

    您可以尝试使用ndarray.tostringresults 转换为字节串。这对于 Dynamo 来说应该很简单。

    arr = np.array([1, 2])
    
    encoded = arr.tostring()
    encoded
    # b'\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'
    

    然后您可以使用np.frombuffer 恢复阵列。

    np.array_equal(arr, np.frombuffer(encoded, dtype=int))
    # True
    

    【讨论】:

    • 成功了!在我的例子中,由于它是一个 floats 数组,我应该只调用 np.frombuffer 而不使用 dtype 参数,因为默认类型是 float
    • @cesarvargas 太好了,你能弄明白!
    猜你喜欢
    • 2022-11-03
    • 2021-03-11
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多