簡體   English   中英

為什么在我進行位屏蔽后numpy.int16變成numpy.float64?

[英]Why numpy.int16 becomes numpy.float64 after I bit masking?

我正在嘗試位屏蔽並丟棄我的data []的LSB,它是一個包含int16的numpy.ndarray。 data = [2,0,4,......,-2,-4]因此,我創建了一個新數組,並使用-2位屏蔽,就16位二進制而言,它應為1111111111111110。

data_new = np.zeros(len(data))
for i in range(len(data)):
    data_new[i] = np.int16(data[i] & -2) 

不知何故,輸出不是int16的數組。 它變為numpy.float64。 而且python不允許我按位執行OR來重寫LSB。

TypeError: unsupported operand type(s) for |: 'numpy.float64' and 'int'
>>type(data[0])
numpy.int16
>>type(data_new[0])
numpy.float64

dtype通過返回的數組的numpy.zeros默認為float64 如果要使用其他類型,則可以顯式傳遞dtype ,例如:

data_new = np.zeros(len(data), np.int16)

或者,如果data已經是正確的大小和dtype ,使用np.zeros_like復制其格式和結構:

data_new = np.zeros_like(data)

請注意,在這種特定情況下,正確的解決方案可能只是讓numpy隱式地通過替換數組的創建並循環以僅填充它來進行屏蔽和新數組的創建:

data_new = data & -2

它將運行更快,並且“可以正常工作”(它的大小和dtype自動與data相同)。

暫無
暫無

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

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