NumPy庫學習
一.數據的維度
數據的維度是數據的組織形式。
- 一維數據:由對等關系的有序或無序數據構成,采用線性方式組織。例如列表和數組,這兩者的區別是列表的數據類型可以不同,數組的數據類型必須相同。
- 二維數據:由多個一維數據構成,是一維數據的組合形式。例如表格是典型的二位數據。
- 多維數據:由一維或二維數據在新維度上擴展形成
- 高維數據:僅利用最基本的二元關系展示數據間的復雜結構。例如json、yaml格式的數據。
二.數據維度的python表示
#一維數據:列表和集合類型 [1,2,3] #有序 {1,2,3} #無序 #二維數據:列表類型 [[1,2,3], [4,5,6]] #多維數據 [[[1,2,3], [4,5,6]], [7,8,9], [4,4,4]] #高維數據:字典類型或數據表示格式,例如JSON、XML、YAML dict={ 'firstName':'Tian', 'lastName':'Song', }
三.NumPy的多維數組對象:ndarray
1.NumPy是一個開源的python科學計算基礎庫,包含:
- 一個強大的N維數組對象:ndarray
- 廣播功能函數
- 整合C/C++/Fortran代碼的工具
- 線性代數,傅里葉變換、隨機數生成等功能
NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎
2.NumPy的引用:
import numpy as np #這是一種約定俗成的引用名稱,建議使用上述約定的別名
3.python已經有列表類型,為什么需要一個數組對象?
- 數組對象可以去除元素運算所需的循環,使一維向量更像單個數據
- 設置專門的數組對象,經過優化,可以提升這類應用的運算速度
- 數組對象采用相同的數據類型,有助於節省運算和存儲空間
例如以下事例:
#計算A^2+B^2,其中A和B是一維數組 import numpy as np #使用列表的方式 def pySum(): a=[0,1,2,3,4] b=[5,6,7,8,9] c=[] for i in range(len(a)): c.append(a[i]**2+b[i]**2) return c print("pySum-->",pySum()) #使用數組的方式 def npSum(): a=np.array([0,1,2,3,4]) b=np.array([5,6,7,8,9]) c=a**2+b**2 return c print("npSum-->",npSum()) #運行結果 ''' pySum--> [25, 37, 53, 73, 97] npSum--> [25 37 53 73 97] ''' #可見如果采用數組的方式,numy把一維向量當作單個數據對待,這樣更有利於進行科學計算
4.ndarray對象的構成:
- 實際的數組
- 描述這些數據的元數據(數據維度、數據類型等)
ndarray數組一般要求所有元素類型相同(同質),數組下標從0開始
ndarry實例:
import numpy as np #ndarray在程序中的別名是:array #np.array()生成一個ndarray數組 a=np.array([[0,1,2,3,4], [5,6,7,8,9]]) print(a) #np.array()輸出成[]形式,元素有空格分割 ''' [[0 1 2 3 4] [5 6 7 8 9]] ''' #軸(axis):保存數據的維度;秩(rank):軸的數量
5.ndarray對象的屬性
- .ndim:秩,即軸的數量或維度的數量
- .shape:ndarray對象的尺度,對於矩陣的n行m列
- .size:ndarray對象元素的個數,相當於.shape中的n*m的值
- .dtype:ndarray對象的元素類型
- .itemsize:ndarray對象中每個元素的大小,以字節為單位
實例:
import numpy as np a=np.array([[1,2,3,4], [5,6,7,8]]) print("維度:",a.ndim) print("尺度:",a.shape) print("元素個數:",a.size) print("元素的類型:",a.dtype) print("元素的大小:",a.itemsize) ''' 維度: 2 尺度: (2, 4) 元素個數: 8 元素的類型: int32 元素的大小: 4 '''
6.ndarray的元素類型
ndarrya為什么要支持這么多種元素類型?
- 科學計算涉及數據較多,對存儲和性能都有較高要求
- 對元素類型精確定義,有助於NumPy合理使用存儲空間並優化性能
- 對元素類型精確定義,有助於程序員對程序規模有合理評估
7.非同質的ndarray對象
非同質的ndarray元素為對象類型,無法有效發揮NumPy優勢,盡量避免使用
import numpy as np a=np.array([[1,2,3,4], [5,6,7]]) print("尺度:",a.shape) print("元素個數:",a.size) print("元素的類型:",a.dtype) print("元素的大小:",a.itemsize) ''' 尺度: (2,) 元素個數: 2 元素的類型: object 元素的大小: 8 ''' #此時每個一維向量被當成一個對象(元素)
8.ndarray數組的創建
(1)從python中的列表、元組等類型創建ndarray數組
x=np.array(list/tuple,dtype=np.float32) #當np.array()不指定dtype時,NumPy將根據情況關聯一個dtype類型
例子:
(2)使用NumPy中函數創建ndarray數組,如:arrange,ones,zeros
#######
注:使用np.arange()方法創建的數組默認是int32類型,另外幾種方法默認是float類型
例子:
例子:
例子:
9.ndarray數組的變換
(1)ndarray數組的維度變換
例子:
(2)ndarray數組的類型變換
new_a = a.astype(new_type)
#astype()方法一定會創建新的數組()原始數組的一個拷貝,即使兩個類型一致
例子:
(3)ndarray數組向列表的轉換
ls=a.tolist()
例子:
10.ndarray數組的操作
(1)ndarray數組的索引和切片
一維數組的索引和切片:與python的列表類似
多維數組的索引:
多維數組的切片:
(2)ndarray數組的運算
數組與標量之間的運算作用於數組的每一個元素
(3)NumPy一元函數
例子:
(4)NumPy二元函數
例子: