[英]How to assign a bytes object to a NumPy array slice?
我想使用NumPy數組對大字節數組進行有效操作。 不幸的是,將bytes
對象分配給NumPy數組的一部分無法正常工作:
import struct
import numpy as np
array = np.zeros(10, dtype=np.uint8)
# Store 65535 into the first two bytes
array[0:2] = struct.pack('<H', 65535) # does not work
print(array)
這導致以下異常:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
在此示例中, bytes
對象是從對struct.pack
的調用struct.pack
。 當將結果包裝到bytearray
,一切都按預期工作,但是我認為這將執行不必要的復制操作(這不是我想要的):
array[0:2] = bytearray(struct.pack('<H', 65535)) # works
為什么bytes
對象在這里不起作用? bytes
bytearray
是可變的,而bytes
bytearray
不是可變的這一事實在這里不應有所作為。
我正在使用NumPy版本1.16.4。
您可以創建一個引用基礎緩沖區的memoryview
。 這應該避免創建副本。
array[:2] = memoryview(struct.pack('<H', 65535))
array
# array([255, 255, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8)
似乎您不能直接分配字節字符串,因為NumPy會在分配之前嘗試根據編碼方案將字節解碼為字符(這將解釋UnicodeDecodeError
)。 對於bytearray
或memoryview
,這意味着每個字節都是獨立的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.