python陣列各元素取整

2021-09-12 02:06:19 字數 1594 閱讀 6799

對於python陣列來說,可以有三種格式:

numpy包裡的array格式,例如,建立乙個三行而列的陣列:a = np.array([[1,2],[3,4],[5,6]])

matrix格式,例如:b = np.matrix([[1,2],[3,4],[5,6]])

利用list組成的陣列,例如:c = [[1,2],[3,4],[5,6]]

可以看到,arraymatrix格式都是numpy包封裝的,那麼它倆有什麼區別呢?其實從字面意思就可以看出來,array嘗試實現我們數學課本中的陣列,而matrix嘗試實現我們數學課本中的矩陣,陣列和矩陣的區別就是這兩個資料結構的區別。即:matrix格式的運算完全滿足矩陣運算規則,比如,上邊建立的b矩陣,我們運算:b*b就會報錯,原因是行列數不滿足矩陣乘法的規則。

一般情況下,我們使用array格式就夠了。

做了乙個稍長的鋪墊之後接下來進入正題,對於array格式的陣列來說,numpy提供了乙個方便的函式:np.trunc(arr)來執行取整操作。

看下邊乙個小例子:

a = np.array([[

1.2,

2.2,

3.2,

4.2],[

5.2,

6.2,

7.2,

8.2]])

b = np.trunc(a)

print

(b)

輸出結果:

[[1. 2. 3. 4.]

[5. 6. 7. 8.]]

可以看到,雖然已經將對應的元素取整,但是元素本身的格式依舊不是整數,如果需要保證元素本身就是int資料型別,那麼需要新增這條語句:c = b.astype(int)

輸出c,可以看到元素已經變成了int型別。

如果原始資料是list,處理之後還需要得到list資料,那麼只需要加一條轉換語句即可:d = c.tolist()

看起來如果以後想將陣列裡的元素取整,只需要轉換成array格式,呼叫np.trunc(arr),就可以解決一切問題了,沒有別的函式什麼事情了。其實不然,上帝給你開啟了一扇窗,總會再給你挖乙個坑。這種方法雖然簡單易行,但是轉換後的每個元素的格式是int32格式的,這個int32型別是經過numpy包二次封裝的,在大多數情況下,和python基本的int資料型別沒有什麼區別,但是,當我們想把這個陣列裡的元素存放在json檔案中,就會報這樣的錯誤:99 is not json serializable。這是因為json是沒有辦法識別numpy包封裝過的資料的。

好訊息是,array轉換成list的函式:a.tolist()函式貼心地提供了把陣列裡每個元素轉換成基本資料型別的服務,只需要利用該函式轉換之後,就可以放心地在json檔案中儲存啦。

python取整方法

用 math 模組中的 ceil 方法 import math math.ceil 3.25 4.0 math.ceil 3.75 4.0 math.ceil 4.85 5.0直接用內建的 int 函式即可 a 3.75 int a 3floor import math math.floor x 對...

python取整函式

1.int 向下取整 內建函式 1 n 3.75 2 print int n 3 3 n 3.25 4 print int n 3 2.round 四捨五入 內建函式 1 n 3.75 2 print round n 4 3 n 3.25 4 print round n floor 向下取整 mat...

python 取整函式

向下取整的運算稱為floor,用數學符號 表示 向上取整的運算稱為ceiling,用數學符號 表示。例如 59 60 0 59 60 1 59 60 1 59 60 0 向上向下 取整函式數隻會對小數點後面的 數字不為零 的數進行操作,要是給它乙個整數 它就返回整數本身 對小數不為零的數操作 給定 ...