gpt4 book ai didi

python - numpy 修剪字节字符串中的尾随零

转载 作者:行者123 更新时间:2023-11-30 22:55:25 26 4
gpt4 key购买 nike

我正在尝试序列化 spacy.io将文档转换为字节字符串并将它们保存在 numpy 数组中。

spacy 有一个 to_bytes 函数,它生成一个 bytearray。我在此 bytearray 上调用 str 并将该字符串对象插入到 numpy 数组中。这适用于大多数文档,除了那些以尾随零字节结尾的文档。

重现:

>>> import numpy as np
>>> b_arr = bytearray(b'\xca\x00\x00\x00n\xff\xff\xff\x19C\x98\xc9\x06\xb18{\xa5\xe0\xaf6\xe3\x9f\xa7\xad\x86\xd6\x8d\xc0\xe6Mo;{\x96xm\x80\xe5\x8c\x9f<!\xc33\x9dg\xd3\xb3D\xf6\xac\x03P\x8do\x07m$r)\x06XBI\xc87\xcao\x83\x1d\xe4\r]\x86\xda\xeb\xb8\x1f\xd5\xcb\xde\xaa\x85r\x0f\xf1=p\xd6\x01\xdc\x83Z|&\xeb\xce|\xf9o\xa0\xe99x\x87\x87\xac\x1b\x17\x08\x000\x92\x10A\x98\x10\x13\x89( 0\x88 "!*N\xf8\xe6\xf4\r\xb1e\xf0\x9d\xfd\x80\xa2G2\x18\xdesv\xec\x85\xf7\xb1\xb3\xb3\xa68\xa7n\xe8BF\xa6\xe0\xb1\x8d\x8d\x9c\xe5\x99\x9bV\xfcE`\x1cI\x92$I\x92$I\x92$%I\x92\xe4\xff\xff\x7f\xd1\xff\xf0T\xa6\xe8\n\x9a\xd3\xffMe0\xa9\x15\xf1|\x00')
>>> b_arr_text = str(b_arr)
>>> b_arr_np = np.asarray([b_arr_text], dtype=np.str)
>>> b_arr_text == b_arr_np[0]
Out[229]: False
>>> len(b_arr_text)
Out[230]: 206
>>> len(b_arr_np[0])
Out[231]: 205
>>> b_arr_np.dtype
Out[232]: dtype('S206')

numpy 字符串会修剪所有尾随零,但是固定长度字符串的数据类型与输入文本的长度相同。

您甚至可以通过在数组中创建任何带有尾随零字节的字节串来看到这一点:

>>> np.asarray(['\xca\x00\x00\x00'], dtype=np.str)

Out: array(['\xca'], dtype='|S4')

我认为numpy认为尾随零无关紧要?但是,我无法将这些字节串反序列化回 spacy 文档对象。

有什么方法可以让 numpy 不修剪尾随零,还是我必须在这种情况下坚持使用 Python 列表?

最佳答案

这是正常行为。在 b_arr_np.tostring() 之后,您可以看到所有尾随零都是有序的。

b_arr = bytearray(b'\xca\x00\x00\x00')

b_arr_text = str(b_arr)

b_arr_np = np.asarray([b_arr_text], dtype=np.str)

b_arr_np
Out[303]:
array(['\xca'],
dtype='|S4')

b_arr_np.tostring()
Out[304]: '\xca\x00\x00\x00'

检查帖子information loss with bytes type来自github。问题是使用 Trailng 非零字节或使用 dtype=uint8b_arr:

b_arr_np = np.asarray([b_arr], dtype=np.uint8)

b_arr_np
Out[319]: array([[202, 0, 0, 0]], dtype=uint8)

b_arr_np.tostring()

Out[320]: '\xca\x00\x00\x00'

关于python - numpy 修剪字节字符串中的尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37435309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com