我有一个布尔型的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)
您可以尝试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
您可以在这里使用numpy.ndarray.tolist
。
numpy.ndarray.tolist