您好,登錄后才能下訂單哦!
本篇內容主要講解“Numpy數組與列表的用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Numpy數組與列表的用法”吧!
今天為大家介紹以下內容:
Ⅰ ndarray數組與列表的相互轉化;
Ⅱ ndarray數組的數據類型轉化;
Ⅲ 改變ndarray數組的形狀;
說白了,就是講述3個函數。當然,這只是numpy函數中的冰山一角。這里只是介紹在學習numpy過程中,最先遇到的幾個函數。
當你學習numpy的時候,我就默認你肯定已經學過Python基礎了。對于list列表這個基本數據類型,你肯定不會感到陌生。
那么我們如何實現 “列表” 與 “數組” 之間的相互轉化呢?
① 列表轉數組:直接將一個列表傳入array()函數中
listlist1 = list(range(10)) print(list1) array1 = np.array(list1) print(array1)
結果如下:
② 數組轉列表:調用數組的tolist()方法
array2 = np.arange(10) print(array2) list2 = array2.tolist() print(list2)
結果如下:
記住一句話:numpy中的數據類型轉換,不要使用x.dtype修改元素的數據類型,最好用x.astype()這種方式。
① numpy中常用的的數據類型
這里只說明一下numpy中常用的數據類型,int類型和float類型,但是一般都不是直接寫int和float的,而是像int32、float64這樣的寫法,因此我們就簡單說一下這個32或64的含義。
在計算機中,最底層執行的是0和1組成的二進制指令,一個0或者1就代表著一個二進制位,又叫"比特位(bit)",這里的32或64就是代表二進制位。
根據計算機的換算單位,1字節=8二進制位,即"1bytes=8bit",因此,根據這種換算:"32bit-4bytes"、"64bit=8bytes"。
由上述分析,我們現在對int32做一個總結,int32說明了該數組中每個元素的數據類型是int32,同時通過32我們又可以知道,該數組中每一個元素的存儲空間是4字節,那么這個范圍大致是[-2147483648,2147483647]。
② 使用dtype原地修改數組的數據類型,會出現什么問題?
x = np.array([1.2,3.4,5.6],dtype=np.float64) print(x) print(x.dtype) print(x.nbytes) # -------------------------------------------- x.dtype="float32" print(x) print(x.nbytes) # -------------------------------------------- x.dtype="float16" print(x) print(x.nbytes)
結果如下:
為什么會出現上述現象?
通過上面的測試發現,當我們使用"dtype"修改數組的數據類型的時候,比特位(也就是一個"二進制位”)每壓縮為原來的二分之一,數組中的元素個數就會變為原來的兩倍。
這是為什么呢?
數組一旦創建,它的數據類型也就定了,也就相當于開辟了一塊內存,用于存儲這個數組了,下面用一個公式形象說明上述現象的原因。
假設某個數組有x個元素,采用的數據類型是int64,這個數據類型占用的內存大小為8字節,因而整個數組占用的內存大小為8*x。
當數據類型變為int32的時候,數組中數據類型就變成了4字節,通過上面的計10算我們已經知道這個數組開辟的內存為8x,因此元素個數就變成了8x/4-2*x,11 就是說,數組元素變為了原來的2倍。
③ 使用astype()函數修改數組的數據類型:相當于新創建了一個數組
z = np.array([1.5,3.7,4.8]) print(z) print(z.dtype) zzz = z.astype(np.float32) print(zz) print(zz.dtype)
結果如下:
① 使用numpy中的reshape()函數修改數組對象
xx = np.arange(10).reshape(2,5) xxx = np.reshape(xx,(5,2)) print(xxx)
結果如下:
② 使用數組對象的reshape()方法修改數組對象
yy = np.arange(10).reshape(2,5) print(yy)
結果如下:
③ 改變數組形狀時,如果維度大于1,可以將“最后一個維度”設置為-1
p = np.arange(6).reshape(2,3) print(p) q = np.arange(6).reshape(2,-1) print(q)
結果如下:
注意:可以這樣做的原因在于,當你指明了前面的維度,最后一個維度會根據數組元素個數和前面的維度數,自動計算出最后一個維度的維度數,也就是說【維度一 * 維度二 * … * 維度N = 元素個數】。
到此,相信大家對“Numpy數組與列表的用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。