一、數組屬性
- 維度:.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
