有沒有辦法使用 numpy 從浮點值運算中獲取十六進制表示?如果可能的話,我想避免使用字串。
例如:
1.1 在單精度十六進制表示中是 0x3F8CCCCD
1.1 在雙精度十六進制表示中是 0x3FF199999999999A
理想情況下,我希望能夠執行以下操作:
numpy.function(value)
回報
hex representation
有什么好方法可以做到這一點嗎?
uj5u.com熱心網友回復:
我可以撰寫一個函式,該函式將為您提供浮點二進制表示的整數解釋,如下所示。
def to_words(x):
''' Gets the integer interpretation of the IEEE754 binary representation '''
if x.dtype == np.float32:
y = np.array(x);
y.dtype = np.uint32;
return y;
elif x.dtype == np.float64:
y = np.array(x)
y.dtype = np.uint64;
return y;
也許您可以找到一種從那里獲取十六進制表示的方法。
uj5u.com熱心網友回復:
好吧,您可以使用frombuffer將浮點陣列或標量的位元組重新解釋為無符號整數的一維陣列;請注意,它是位元組的視圖,而不是副本。要從陣列中獲取標量整數值(這確實復制了值,而不是視圖),您只需索引。
x32 = np.frombuffer(np.float32(1.1), dtype = np.uint32)[0]
# 1066192077
x64 = np.frombuffer(np.float64(1.1), dtype = np.uint64)[0]
# 4607632778762754458
要將這些無符號整數列印為它們的十六進制表示,您確實必須將其顯式轉換為字串。在列印時避免使用字串是不可能的。一切都以位元組、1 和 0 的形式存盤,因此數字自然以 2 為基數。以 base-10 列印的常見默認值也需要從位元組進行字串轉換。
hex(x32)
# '0x3f8ccccd'
hex(x64)
# '0x3ff199999999999a'
uj5u.com熱心網友回復:
您可以使用viewnumpy 陣列的方法來執行等效于 C 的轉換。另一種方法是使用float.hex比原始帖子中顯示的更人性化的十六進制表示。
示例程式:
import numpy as np
d = np.array(1.1)
i = d.view('int64')
print(f'double: {d}')
print(f'cast to int: {i}')
print(f'hex: 0x{i.item():016x}')
print(f'floathex: {float.hex(d.item())}')
輸出:
double: 1.1
cast to int: 4607632778762754458
hex: 0x3ff199999999999a
floathex: 0x1.199999999999ap 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344672.html
