numpy簡介
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
NumPy 是一個運行速度非常快的數學庫,主要用於數組計算,包含:
- 一個強大的N維數組對象 ndarray
- 廣播功能函數
- 整合 C/C++/Fortran 代碼的工具
- 線性代數、傅立葉變換、隨機數生成等功能
NumPy Ndarray 對象
- NumPy 最重要的一個特點是其 N 維數組對象 ndarray,它是一系列同類型數據的集合,以 0 下標為開始進行集合中元素的索引
- ndarray 對象是用於存放同類型元素的多維數組
- ndarray 中的每個元素在內存中都有相同存儲大小的區域
numpy對象創建:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名稱 |
描述 |
object |
數組或嵌套的數列 |
dtype |
數組元素的數據類型,可選 |
copy |
對象是否需要複製,可選 |
order |
創建數組的樣式,C為行方向,F為列方向,A為任意方向(默認) |
subok |
默認返回一個與基類類型一致的數組 |
ndmin |
指定生成數組的最小維度 |
數據類型轉換
拷貝
最小維度
subok
NumPy 數據類型
名稱 |
描述 |
bool_ |
布爾型數據類型(True 或者 False) |
int_ |
默認的整數類型(類似於 C 語言中的 long,int32 或 int64) |
intc |
與 C 的 int 類型一樣,一般是 int32 或 int 64 |
intp |
用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64) |
int8 |
字節(-128 to 127) |
int16 |
整數(-32768 to 32767) |
int32 |
整數(-2147483648 to 2147483647) |
int64 |
整數(-9223372036854775808 to 9223372036854775807) |
uint8 |
無符號整數(0 to 255) |
uint16 |
無符號整數(0 to 65535) |
uint32 |
無符號整數(0 to 4294967295) |
uint64 |
無符號整數(0 to 18446744073709551615) |
float_ |
float64 類型的簡寫 |
float16 |
半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位 |
float32 |
單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位 |
float64 |
雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位 |
complex_ |
complex128 類型的簡寫,即 128 位複數 |
complex64 |
複數,表示雙 32 位浮點數(實數部分和虛數部分) |
complex128 |
複數,表示雙 64 位浮點數(實數部分和虛數部分) |
數據類型對象 (dtype)
數據類型對象(numpy.dtype 類的實例)用來描述與數組對應的內存區域是如何使用,它描述了數據的以下幾個方面:
- 數據的類型(整數,浮點數或者 Python 對象)
- 數據的大小(例如, 整數使用多少個字節存儲)
- 數據的字節順序(小端法或大端法)
- 在結構化類型的情況下,欄位的名稱、每個欄位的數據類型和每個欄位所取的內存塊的部分
- 如果數據類型是子數組,那麼它的形狀和數據類型是什麼。
字節順序是通過對數據類型預先設定 < 或 > 來決定的。 < 意味著小端法(最小值存儲在最小的地址,即低位組放在最前面)。> 意味著大端法(最重要的字節存儲在最小的地址,即高位組放在最前面)。
dtype 對象是使用以下語法構造的:
numpy.dtype(object, align, copy)
object - 要轉換為的數據類型對象
align - 如果為 true,填充欄位使其類似 C 的結構體。
copy - 複製 dtype 對象 ,如果為 false,則是對內置數據類型對象的引用
每個內建類型都有一個唯一定義它的字符代碼
字符 |
對應類型 |
b |
布爾型 |
i |
(有符號) 整型 |
u |
無符號整型 integer |
f |
浮點型 |
c |
複數浮點型 |
m |
timedelta(時間間隔) |
M |
datetime(日期時間) |
O |
(Python) 對象 |
S, a |
(byte-)字符串 |
U |
Unicode |
V |
原始數據 (void) |
dt = np.dtype(np.int32)
print(dt)
輸出:
int32
dt = np.dtype('i4')
print(dt)
輸出:
int32
dt = np.dtype([('age', np.int8)])
print(dt)
輸出:
[('age', 'i1')]
結構化數據類型
student = np.dtype([('name','S20'), ('age','i1'), ('score', 'f4')])
a = np.array([('xm', 10, 98.123456789), ('xh', 8, 99.111111111), ('xl', '9', 100)], dtype=student)
print(a)
輸出:
[(b'xm', 10, 98.12346 ) (b'xh', 8, 99.111115) (b'xl', 9, 100. )]