我如何将numpy布尔数组转换为python布尔以进行序列化(例如,对于mongodb)?

问题描述 投票:0回答:2

我有一个布尔型的numpy数组:

import numpy as np
x = np.zeros(100).astype(np.bool)
x[20] = True # say

[当我尝试将此(每个文档一个元素)作为OrderedDict的一部分插入mongodb时,出现以下错误:

InvalidDocument: cannot encode object: False, of type: <class 'numpy.bool_'>

这是我之前遇到的单例numpy布尔值的序列化问题。

我如何将numpy数组转换为python布尔数组以进行序列化?

以下内容无效:

y = x.astype(bool)
python python-3.x mongodb numpy numpy-ndarray
2个回答
0
投票

您可以尝试numpy.asscalar

import numpy as np
x = np.zeros(100).astype(np.bool)
z = [np.asscalar(x_i) for x_i in x]
print(type(z))

您也可以使用item(),这是更好的选择,因为不推荐使用asscalar。

import numpy as np
x = np.zeros(100).astype(np.bool)
z = [x_i.item() for x_i in x]
print(type(z))
print(z)

对于更长的列表,tolist()是更好的选择。

import numpy as np
import time
x = np.zeros(100000).astype(np.bool)
t1 = time.time()
z = [x_i.item() for x_i in x]
t2 = time.time()

print(t2-t1)
t1 = time.time()
z = x.tolist()
t2 = time.time()
print(t2-t1)
0.0519254207611084
0.0015206336975097656

0
投票

您可以在这里使用numpy.ndarray.tolist

numpy.ndarray.tolist
© www.soinside.com 2019 - 2024. All rights reserved.