一、數組屬性
- 維度:.ndim,返回當前數組維度
- 類型:.dtype,返回數組內元素的數據類型,注:numpy定義的數組數據類型是統一,不能多類型混合
- 形狀:.shape,返回數據形狀,數組每層中的元素個數
- 元素總數:.size,返回數組中元素總個數
- 字節大小:.itemsize,返回數組中每個元素的字節大小。
import numpy as np a=np.full((2,5,4),10) print("數組a:",a) print("數組a中元素總數:",a.size) print("數組a的形狀:",a.shape) print("數組a中的元素類型:",a.dtype) print("數組a的維度:",a.ndim) print("數組a中的元素字節大小:",a.itemsize) >>> 數組a: [[[10 10 10 10] [10 10 10 10] [10 10 10 10] [10 10 10 10] [10 10 10 10]] [[10 10 10 10] [10 10 10 10] [10 10 10 10] [10 10 10 10] [10 10 10 10]]] 數組a中元素總數: 40 數組a的形狀: (2, 5, 4) 數組a中的元素類型: int32 數組a的維度: 3 數組a中的元素字節大小: 4
二、數據類型
- 不指定的情況下,numpy會自動推斷出適合的數據類型,所以一般不需要顯示給定數據類型。
- 數值型dtype的命名方式為:一個類型名稱(eg:int、float等),后接一個表示各個元素位長的數字
- 如Python的float數據類型(雙精度浮點值),需要占用8個字節(64位),因此在NumPy中記為float64
- 每個數據類型都有一個類型代碼,即簡寫方式
數據類型 | 簡寫 | 說明 | 字節 | 范圍 | |
整型 | int_ | 默認整形 | |||
intc | 等價於long的整形 | ||||
int8 | i1 | 字節整形 | 1 | [-128,127] | |
int16 | i2 | 整形 | 2 | [-32768,32767] | |
int32 | i3 | 整形 | 4 | [-2^31, 2^31-1] | |
int64 | i4 | 整形 | 6 | [-2^63, 2^63-1] | |
無符號 整型 |
uint8 | u1 | 無符號整形 | 1 | [0,255] |
uint16 | u2 | 無符號整形 | 2 | [0,65535] | |
uint32 | u3 | 無符號整形 | 1 | [0, 2^32-1] | |
uint64 | u4 | 無符號整形 | 1 | [0,2^64-1] | |
布爾 | bool_ | 布爾值 | 1 | True或者False | |
浮點型 | float_ | float64簡寫形式 | 8 | ||
float16 | f2 | 半精度浮點型 | 2 | 1符號位+5位指數+10位的小數部分 | |
float32 | f4或者f | 單精度浮點型 | 4 | 1符號位+8位指數+23位的小數部分 | |
float64 | f8或者d | 雙精度浮點型 | 8 | 1符號位+11位指數+52位的小數部分 | |
復數 | complex_ | c16 | complex128的簡寫形式 | ||
complex64 | c8 | 復數,由兩個32位的浮點數來表示 | 32 | ||
complex128 | c16 | 復數,由兩個64位的浮點數來表示 | 64 | ||
對象 | object | O | Python對象類型 | ||
字符串 | String_ | S | 固定長度的字符串類型(每個字符1個字節) | ||
Unicode_ | U | 固定長度的unicode類型的字符串 |
三、數組修改(屬性)
- 形狀修改:.reshape()、.T
- 維度修改:.reshape()
- 類型修改:.astype()
3.1、reshape()方法:修改數組形狀與維度
- 直接修改數組ndarray的shape值,要求修改后乘積不變。
- 直接使用reshape函數創建一個改變尺寸的新數組,原數組的shape保持不變,但是新數組和原數組共享一個內存空間,也就是修改任何一個數組中的值都會對另外一個產生影響,另外要求新數組的元素個數和原數組一致。
- 當指定某一個軸為-1的時候,表示將根據數組元素的數量自動計算該軸的長度值。
import numpy as np a=np.arange(30) print("原數組(一維):",a) b=a.reshape(2,3,5) print("新數組(三維):",b) b[1][2][2]=666 print("修改b中的數值會影響到a:",a) print("對b使用降維打擊:",b.reshape(10,-1)) >>> 原數組(一維): [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29] 新數組(三維): [[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] [[15 16 17 18 19] [20 21 22 23 24] [25 26 27 28 29]]] 修改b中的數值會影響到a: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 666 28 29] 對b使用降維打擊: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11] [ 12 13 14] [ 15 16 17] [ 18 19 20] [ 21 22 23] [ 24 25 26] [666 28 29]]
3.2、T方法:行列轉置
- 使用T方法以后,可以對數組進行行列轉置。
import numpy as np a=np.random.randint(1,10,size=(2,3,4)) b=a.T print(b.shape) >>> (4, 3, 2)
3.2、astype()方法:修改元素類型
- 如果需要更改一個已經存在的數組的數據類型,可以通過astype方法進行修改從而得到一個新數組。
import numpy as np a=np.arange(1,5) print("原數組:{0},其數據類型為:{1}".format(a,a.dtype)) b=a.astype(float) print("新數組:{0},其數據類型為:{1}".format(b,b.dtype)) >>> 原數組:[1 2 3 4],其數據類型為:int32 新數組:[1. 2. 3. 4.],其數據類型為:float64