如何在 DynamoDB 上存储 numpy.ndarray?

ces*_*gas 5 python arrays numpy amazon-dynamodb numpy-ndarray

当我调用该函数时,我numpy.ndarray@ageitgey 的 facial_recognition Python 库face_encodings生成了这个。我需要将这些数据保存到亚马逊的DynamoDB;但我不知道怎么做。

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

我认为我可以将其保存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
Run Code Online (Sandbox Code Playgroud)

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

cs9*_*s95 6

您可以尝试results使用 转换为字节字符串ndarray.tostring。对于 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'
Run Code Online (Sandbox Code Playgroud)

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

np.array_equal(arr, np.frombuffer(encoded, dtype=int))
# True
Run Code Online (Sandbox Code Playgroud)