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