Numpy基础(part1)--ndarray数组
鄙人學(xué)習(xí)筆記,這個筆記以例子為主。
開發(fā)工具:Spyder
文章目錄
- 使用python做數(shù)據(jù)分析的常用庫
- numpy概述
- ndarray數(shù)組
- 內(nèi)存中的ndarray對象
- ndarray數(shù)組對象的創(chuàng)建
- 創(chuàng)建方式1
- 創(chuàng)建方式2
- 創(chuàng)建方式3
- 創(chuàng)建方式4
- 舉個例子
- ndarray對象屬性的基本操作
- 數(shù)組的維度(np.ndarray.shape)
- 元素的類型(np.ndarray.dtype)
- 數(shù)組元素的個數(shù)(np.ndarray.size)
- 數(shù)組元素索引(下標(biāo))
- ndarray對象屬性操作詳解
- numpy的內(nèi)部基本數(shù)據(jù)類型
- 自定義復(fù)合數(shù)據(jù)類型
- 舉個例子1
- 舉個例子2(日期類型的數(shù)組)
- 類型字符碼
- 類型字符碼格式
使用python做數(shù)據(jù)分析的常用庫
- numpy 基礎(chǔ)數(shù)值算法
- scipy 科學(xué)計算
- matplotlib 數(shù)據(jù)可視化
- pandas 序列高級函數(shù)
numpy概述
①Numerical Python,數(shù)值的Python,補(bǔ)充了Python語言所欠缺的數(shù)值計算能力。
②Numpy是其它數(shù)據(jù)分析及機(jī)器學(xué)習(xí)庫的底層庫。
③Numpy完全標(biāo)準(zhǔn)C語言實(shí)現(xiàn),運(yùn)行效率充分優(yōu)化。
④Numpy開源免費(fèi)。
ndarray數(shù)組
ndarray數(shù)組是用np.ndarray類的對象表示的n維數(shù)組。
- 例子
內(nèi)存中的ndarray對象
- 元數(shù)據(jù)(metadata)
元數(shù)據(jù)存儲對目標(biāo)數(shù)組的描述信息,如:dim count(維數(shù))、shape(維度)、dtype(數(shù)據(jù)類型)、size(元素個數(shù))、data(作為一個指針,指向具體數(shù)據(jù))等。
- 實(shí)際數(shù)據(jù)
實(shí)際數(shù)據(jù)是完整的數(shù)組數(shù)據(jù)。
將實(shí)際數(shù)據(jù)與元數(shù)據(jù)分開存放,一方面提高了內(nèi)存空間的使用效率,另一方面減少對實(shí)際數(shù)據(jù)的訪問效率,提高性能。
ndarray數(shù)組對象的創(chuàng)建
創(chuàng)建方式1
- 語法
- 例子
創(chuàng)建方式2
- 語法
- 例子
創(chuàng)建方式3
- 語法
- 例子
創(chuàng)建方式4
- 語法
- 例子
舉個例子
代碼:
import numpy as npa1 = np.array([[1, 2, 3], [4, 5, 6]]) print(a1, a1.shape)a2 = np.arange(0, 5) print(a2)a3 = np.zeros(5, dtype = 'int32') print(a3)a4 = np.ones(5, dtype = 'float32') print(a4)a5 = np.zeros_like(a1) print(a5)備注:np.zeros_like(a1)為構(gòu)造一個維度類似于a1的全0數(shù)組。
結(jié)果:
- ndarray數(shù)組對象的特點(diǎn)
①ndarray數(shù)組是同質(zhì)數(shù)組,即所有元素的數(shù)據(jù)類型必須相同。
②ndarray數(shù)組的下標(biāo)從0開始,最后一個元素的下標(biāo)為數(shù)組長度減1。
ndarray對象屬性的基本操作
數(shù)組的維度(np.ndarray.shape)
- 例子
元素的類型(np.ndarray.dtype)
- 例子
備注:【<U11表示11個Unicode字符】
數(shù)組元素的個數(shù)(np.ndarray.size)
- 例子
備注:size表示底層元素個數(shù),len表示最外層對象個數(shù)。
數(shù)組元素索引(下標(biāo))
- 例子
ndarray對象屬性操作詳解
numpy的內(nèi)部基本數(shù)據(jù)類型
| 布爾型 | bool_ |
| 有符號整數(shù)型 | int8(-128~127)/int16/int32/int64 |
| 無符號整數(shù)型 | uint8(0~255)/uint16/uint32/uint64 |
| 浮點(diǎn)型 | float16/float32/float64 |
| 復(fù)數(shù)型 | complex64/complex128 |
| 字串型 | str_,每個字符用32位Unicode編碼表示 |
自定義復(fù)合數(shù)據(jù)類型
舉個例子1
我們有以下數(shù)據(jù):
import numpy as npdata=[('xb', [90, 80, 85], 15),('dh', [92, 81, 83], 16),('xh', [95, 85, 95], 15) ]直接將data放入np.array()中:
嗯,報錯了!說明np.array()不能識別我們的data。
我們可以設(shè)置dtype,來識別數(shù)據(jù):
import numpy as npdata=[('xb', [90, 80, 85], 15),('dh', [92, 81, 83], 16),('xh', [95, 85, 95], 15) ]a01= np.array(data, dtype='U2, 3int32, int32') print(a01)備注:U代表uniocode字符,2代表兩個,若出現(xiàn)第三個字符,則python會無法識別。int32代表整形,3int32表示包含3個整形的列表。
輸出結(jié)果:
我們試著用2種方法讀取數(shù)據(jù):
print(a01[2][2]) print(a01[2]['f2']) #f2表示下標(biāo)為2的字段結(jié)果:
若data中字段比較多,我們可以使用另一種設(shè)置dtype的方式:
import numpy as npdata=[('xb', [90, 80, 85], 15),('dh', [92, 81, 83], 16),('xh', [95, 85, 95], 15) ]a02= np.array(data, dtype=[('name', 'str', 2),('scores', 'int32', 3),('age', 'int32', 1)])讀取數(shù)據(jù):
print(a02) print(a02[2]['age'])結(jié)果:
我們可以使用第三種設(shè)置dtype的方式:
import numpy as npdata=[('xb', [90, 80, 85], 15),('dh', [92, 81, 83], 16),('xh', [95, 85, 95], 15) ]ary = np.array(data, dtype = {'names':['name', 'scores', 'age'],'formats':['U2', '3int32', 'int32']})再讀取一下數(shù)據(jù):
print(ary) print(ary[2]['name'])結(jié)果:
舉個例子2(日期類型的數(shù)組)
數(shù)據(jù):
import numpy as npdata = ['2020', '2015-07-01','2012-01-01', '1997-09-28']直接將data放入np.array(),并將數(shù)據(jù)和數(shù)據(jù)類型打印出來:
轉(zhuǎn)換數(shù)據(jù)類型, 并將數(shù)據(jù)和數(shù)據(jù)類型打印出來:
除此之外,原始數(shù)據(jù)還可以寫出時、分、秒,但是由于設(shè)定轉(zhuǎn)換的數(shù)據(jù)類型是精確到Day所以,輸出的結(jié)果,不會顯示出時、分、秒:
import numpy as npdata = ['2020', '2015-07-01','2012-01-01', '1997-09-28 11:10:01']d01 = np.array(data) print(d01, d01.dtype)#轉(zhuǎn)換成精確到天的datetime64數(shù)據(jù)類型 d02 = d01.astype('M8[D]') print(d02, d02.dtype)結(jié)果:
備注:若日期寫成除了2020-01-01之外的格式(如:2020/01/01)則python無法轉(zhuǎn)成時間格式。
時間之間做減法:
import numpy as npdata = ['2020', '2020-03-28','2012-01-01', '1997-09-28 11:10:01']d01 = np.array(data) d02 = d01.astype('M8[D]')print(d02[1] - d02[0])結(jié)果:
類型字符碼
| np.bool_ | ? |
| np.int8/16/32/64 | i1/i2/i4/i8 |
| np.uint8/16/32/64 | u1/u2/u4/u8 |
| np.float16/32/64 | f2/f4/f8 |
| np.complex64/128 | c8/c16 |
| np.str_ | U<字符數(shù)> |
| np.datetime64 | M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s] |
類型字符碼格式
- 格式
- 例子
| 3i4 | 大端字節(jié)序,3個元素的一維數(shù)組,每個元素都是整型,每個整型元素占4個字節(jié)。 |
| <(2,3)u8 | 小端字節(jié)序,6個元素2行3列的二維數(shù)組,每個元素都是無符號整型,每個無符號整型元素占8個字節(jié)。 |
| U7 | 包含7個字符的Unicode字符串,每個字符占4個字節(jié),采用默認(rèn)字節(jié)序。 |
- 字節(jié)序前綴
| < | 小端 |
| > | 大端 |
| [=] | 硬件字節(jié)序 |
總結(jié)
以上是生活随笔為你收集整理的Numpy基础(part1)--ndarray数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带增的网名76个
- 下一篇: Numpy基础(part2)--ndar