我有一个numpy
数组:
import numpy as np
Boolval = np.array([b'false',b'true',b'false',b'false',b'false',b'false',b'false',b'false'])
我正在尝试将每个值转换为值为 0 或 1 的整个数组(例如 [0, 1, 0, 0, 0, 0, 0]
(。
我尝试了以下方法:
import struct
print(struct.unpack('f',Boolval))
它抛出一个错误:struct.error: unpack requires a buffer of 4 bytes
我只尝试了一个值,
print(struct.unpack("f", Boolval[1]))
它给出了(7.24431922380234e+22,)
的值。不是 1 或 0。
它们不是字节值,而是二进制字符串。尝试类似的东西
>>> [int(b == b'true') for b in Boolval]
[0, 1, 0, 0, 0, 0, 0, 0, 0]
这将检查该项是否等于b'true'
并将真值(True
或False
(转换为int
。
In [253]: Boolval = np.where([0,1,0,0,1,0,1],b'true',b'false')
In [254]: Boolval # the repr display
Out[254]:
array([b'false', b'true', b'false', b'false', b'true', b'false', b'true'],
dtype='|S5')
In [255]: print(Boolval) # the str display
[b'false' b'true' b'false' b'false' b'true' b'false' b'true']
In [256]: Boolval!=b'false'
Out[256]: array([False, True, False, False, True, False, True])
In [257]: Boolval==b'true'
Out[257]: array([False, True, False, False, True, False, True])
我们可以将其转换为布尔数组,并与字节串进行比较:
In [256]: Boolval!=b'false'
Out[256]: array([False, True, False, False, True, False, True])
In [257]: Boolval==b'true'
Out[257]: array([False, True, False, False, True, False, True])
以及具有astype
转换的整数数组:
In [258]: (Boolval!=b'false').astype(int)
Out[258]: array([0, 1, 0, 0, 1, 0, 1])
In [259]: np.where(Boolval==b'true')
Out[259]: (array([1, 4, 6]),)
和列表理解方法:
In [260]: [int(b == b'true') for b in Boolval]
Out[260]: [0, 1, 0, 0, 1, 0, 1]
如果我们从一个列表开始,列表理解通常更快。 但是从数组开始可能会更慢。 虽然这里的样本很小,而且字符串相等性测试并不像数字运算那么快。