簡體   English   中英

如何將字節對象分配給NumPy數組切片?

[英]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 )。 對於bytearraymemoryview ,這意味着每個字節都是獨立的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM