Python 中的 numpy 定義 dtype 型別後為什麼賦值32768得到的是相反數?

時間 2021-06-02 00:26:03

1樓:不中

計算機中,不管什麼語言,儲存資料都是用的二進位制數。乙個陣列就是多個二進位制數的集合。陣列中每個元素的型別表明其理解方式,包括長度及其運算方法。

原來陣列的每個元素是32位的,後轉換成short即16位有符號數。這種轉換中,陣列儲存的數並未發生變化,只是理解方式不同了。

比如第乙個元素其值是0x00000001理解為32位整型值就是1這乙個元素;理解為16位整型就是0,1兩個元素。

這兩個元素由於x86使用的小端位元組序,低位的數放在低位址,就是1放在低位址,0放在高位址。對陣列來說存放順序是第乙個元素放低位址,後續元素依次往高位址放。顯示出來就是[1,0]。

而32768這個數的16進製制形式是0x00008000.按照16位有符號整型來理解其低16位就是-32768。高位則是0。

2樓:SystemLight

個人理解

python_val = -32769

print(bin(python_val)) # 符號位+中間數字+已有的 16 位數字位 -0b1000000000000001 存成補碼 1...1...0111111111111111

print(python_val)

numpy_short_val = np.short(python_val) # numpy 得到以後把只取 16 位,發現最高位是 0 為正數,正數原碼=補碼 0111111111111111

print(bin(numpy_short_val)) # 當 python 再讀取出來時:0111111111111111 就是 32767

print(numpy_short_val)

3樓:黃哥

請先看幫助文件,numpy 是C 語言開發的Signed integer type, compatible with C ``short``.

``np.int16``: 16-bit signed integer (-32768 to 32767).

這個數量型別取值範圍是 (-32768 to 32767), 如果右邊比32767 大,就會是左邊的-32768開始計數

具體原因要去看計算機系統概論中,「溢位和補碼」等相關知識。

Python庫Numpy裡ndarray ndim 是什麼意思?

參考旁徵勃引的答案 numpy官網教程 NumPy quickstart 裡面關於ndim的定義 ndarray.ndim the number of axes dimensions of the array.另外ndarray.shape也提到了ndim the dimensions of the...

python下numpy不成功,請問有沒有簡單的安裝方法?

Gxz 請問Centos 如何離線安裝Numpy Panda Scipy這些包呢?生產伺服器不允許接網路,也就不能pip install了,所以現在不知道該如何離線方式安裝呢?還請各位賜教 王潔萍 pip default timeout 100 install U numpy 遇到read time...

請教如何自定義python的matplotlib中的X軸刻度(為時間)的問題?

ting harley 可以考慮使用 pandas 裡面的 resample 方法,下面是乙個例子,不知道能不能解決你的問題。另外如果在不同的時間點數值的差異特別大,可以考慮使用對數y軸。import pandas as pd import numpy as np time range pd.dat...