簡介
Numpy:提供了一個在Python中做科學計算的基礎(chǔ)庫浙芙,重在數(shù)值計算,主要用于多維數(shù)組(矩陣)處理的庫。
用來存儲和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多嗓蘑。
本身是由C語言開發(fā),是個很基礎(chǔ)的擴展匿乃,Python其余的科學計算擴展大部分都是以此為基礎(chǔ)。
高性能科學計算和數(shù)據(jù)分析的基礎(chǔ)包
ndarray豌汇,多維數(shù)組(矩陣)幢炸,具有矢量運算能力,快速拒贱、節(jié)省空間
矩陣運算宛徊,無需循環(huán),可完成類似Matlab中的矢量運算
線性代數(shù)逻澳、隨機數(shù)生成
#導入
import numpy as np
數(shù)組創(chuàng)建
NumPy數(shù)組是一個多維的數(shù)組對象(矩陣)闸天,稱為ndarray,具有矢量算術(shù)運算能力斜做,并具有執(zhí)行速度快和節(jié)省空間的特點苞氮。
注意:ndarray的下標從0開始,且數(shù)組里的所有元素必須是相同類型
ndarray屬性
- ndim屬性:維度個數(shù)
- shape屬性:維度大小
- dtype屬性:數(shù)據(jù)類型
ndarray的隨機創(chuàng)建
通過隨機抽樣(numpy.random)生成隨機數(shù)據(jù)
np.random.rand()
隨機樣本位于[0,1)中瓤逼,rand固定取件0.0~1.0
np.random.randn()
隨機樣本是從標準正態(tài)分布中返回一個或多個樣本值
np.random.randint()
生成指定維度大辛鳌(3行4列)的隨機多維整型數(shù)據(jù)(二維),randint()可以指定區(qū)間(-1, 5)
np.random.uniform()
生成指定維度大邪云臁(3行4列)的隨機多維浮點型數(shù)據(jù)(二維)贷帮,uniform()可以指定區(qū)間(-1, 5)
ndarray的序列創(chuàng)建
np.array(collection)
collection為序列型對象(list)、嵌套序列對象(list of list)
#list序列轉(zhuǎn)換為ndarray
list = range(10)
arr = np.array(list)
print(arr)#ndarray數(shù)據(jù)
print(type(arr))
np.zeros()指定大小的全0數(shù)組诱告。注意第一個參數(shù)是數(shù)組撵枢,用來指定大小,如(3,4)
zeros_arr = np.zeros((3,4))
np.ones()
指定大小全是1的數(shù)組精居,注意:第一個參數(shù)是遠足锄禽,用來指定大小,如(3,4)
np.ones()
np.empty()
初始化數(shù)組靴姿,不是總是返回全0沟绪,有時返回的是未初始化的隨機值(內(nèi)存里的隨機值)
#np.empty
empty_arr = np.empty((3,3))
#np.empty 指定數(shù)據(jù)類型
empty_int_arr = np.empty((3,3),int)
np.arange()和reshape()
arange()類似python的range(),創(chuàng)建一個一維ndarray數(shù)組
reshape將重新調(diào)整數(shù)組的維數(shù)
# np.arange()
arr = np.arange(15) # 15個元素的 一維數(shù)組
print(arr)
print(arr.reshape(3, 5)) # 3x5個元素的 二維數(shù)組
print(arr.reshape(1, 3, 5)) # 1x3x5個元素的 三維數(shù)組
ndarray數(shù)據(jù)類型
dtype參數(shù)
指定數(shù)組的數(shù)據(jù)類型,類型名+位數(shù)空猜,如float64绽慈,int32
#初始化3行4列數(shù)組恨旱,數(shù)據(jù)類型為float64
zeros_float_arr = np.zeros((3,4),dtype=np.float64)
print(zeros_float_arr)
astype方法
#astype轉(zhuǎn)換數(shù)據(jù)類型,將已有的數(shù)組的數(shù)據(jù)類型轉(zhuǎn)換為int32
zeros_int_arr = zeros_float_arr.astype(np.int32)
print(zeros_int_arr)
print(zeros_int_arr.dtype)
ndarray的矩陣運算
數(shù)組是編程中的概念坝疼,矩陣搜贤、矢量是數(shù)學概念。
在計算機編程中钝凶,矩陣可以用數(shù)組形式定義仪芒,矢量可以用結(jié)構(gòu)定義!
1.矢量運算:相同大小的數(shù)組間運算應(yīng)用在元素上
#矢量與矢量運算
arr = np.array([[1,2,3],[4,5,6]])
print("元素相乘:")
print(arr*arr)
print("矩陣相加:")
print(arr + arr)
2.矢量和標量運算:"廣播"-將標量"廣播"到各個元素
#矢量與標量運算
arr = np.array([[1,2,3],[4,5,6]])
print(1./arr)
print(2.*arr)
ndarray的索引與切片
1.一維數(shù)組的索引與切片-與python的列表索引功能相似
#一維數(shù)組
arr1 = np.arange(10)
print(arr1)
print(arr1[2:5])
2.多維數(shù)組的索引與切片
arr2 = np.random.randint(1,5,size(3,5))
print(arr2)
print(arr2[2:3])
3.條件索引
布爾值多維數(shù)組:arr[condition],condition也可以是多個條件組合耕陷。
注意闲孤,多個條件組合要使用 & | 連接,而不是Python的 and or崖叫。
# 條件索引 找出 data_arr 中 2005年后的數(shù)據(jù)
data_arr = np.random.rand(3,3)
print(data_arr)
year_arr = np.array([[2000, 2001, 2000], [2005, 2002, 2009], [2001, 2003, 2010]])
is_year_after_2005 = year_arr >= 2005
print(is_year_after_2005, is_year_after_2005.dtype)
filtered_arr = data_arr[is_year_after_2005]
print(filtered_arr)
# 多個條件
filtered_arr = data_arr[(year_arr <= 2005) & (year_arr % 2 == 0)]
print(filtered_arr)
ndarray的轉(zhuǎn)置
二維數(shù)組直接使用轉(zhuǎn)換函數(shù):transpose()
高維數(shù)組轉(zhuǎn)換要指定維度編號參數(shù) (0, 1, 2, …)巍耗,注意參數(shù)是元組
arr = np.random.rand(2,3) # 2x3 數(shù)組
print(arr)
print(arr.transpose()) # 轉(zhuǎn)換為 3x2 數(shù)組
arr3d = np.random.rand(2,3,4) # 2x3x4 數(shù)組,2對應(yīng)0嗜诀,3對應(yīng)1猾警,4對應(yīng)2
print(arr3d)
print(arr3d.transpose((1,0,2))) # 根據(jù)維度編號,轉(zhuǎn)為為 3x2x4 數(shù)組
元素計算函數(shù)
- ceil(): 向上最接近的整數(shù)隆敢,參數(shù)是 number 或 array
- floor(): 向下最接近的整數(shù)发皿,參數(shù)是 number 或 array
- rint(): 四舍五入,參數(shù)是 number 或 array
- isnan(): 判斷元素是否為 NaN(Not a Number)拂蝎,參數(shù)是 number 或 array
- multiply(): 元素相乘穴墅,參數(shù)是 number 或 array
- divide(): 元素相除,參數(shù)是 number 或 array
- abs():元素的絕對值温自,參數(shù)是 number 或 array
- where(condition, x, y): 三元運算符封救,x if condition else y
# randn() 返回具有標準正態(tài)分布的序列。
arr = np.random.randn(2,3)
print(arr)
print(np.ceil(arr))
print(np.floor(arr))
print(np.rint(arr))
print(np.isnan(arr))
print(np.multiply(arr, arr))
print(np.divide(arr, arr))
print(np.where(arr > 0, 1, -1))
元素統(tǒng)計函數(shù)
- np.mean(), np.sum():所有元素的平均值捣作,所有元素的和誉结,參數(shù)是 number 或 array
- np.max(), np.min():所有元素的最大值,所有元素的最小值券躁,參數(shù)是 number 或 array
- np.std(), np.var():所有元素的標準差惩坑,所有元素的方差,參數(shù)是 number 或 array
- np.argmax(), np.argmin():最大值的下標索引值也拜,最小值的下標索引值以舒,參數(shù)是 number 或 array
- np.cumsum(), np.cumprod():返回一個一維數(shù)組,每個元素都是之前所有元素的 累加和 和 累乘積慢哈,參數(shù)是 number 或 array
- 多維數(shù)組默認統(tǒng)計全部維度蔓钟,axis參數(shù)可以按指定軸心統(tǒng)計,值為0則按列統(tǒng)計卵贱,值為1則按行統(tǒng)計滥沫。
arr = np.arange(12).reshape(3,4)
print(arr)
print(np.sum(arr)) # 所有元素的和
print(np.sum(arr, axis=0)) # 數(shù)組的按列統(tǒng)計和
print(np.sum(arr, axis=1)) # 數(shù)組的按行統(tǒng)計和
print(np.cumsum(arr)) # 返回一個一維數(shù)組侣集,每個元素都是之前所有元素的 累加和
arr = np.random.randint(0,10,(3,4))
print(arr)
#所有元素的平均值與和
print(np.mean(arr))
print(np.sum(arr))
#求數(shù)組的最大值
print(np.max(arr))
print(np.min(arr))
#方差和標準差:衡量數(shù)據(jù)和期望值之間的偏離值
#求方差:所有元素都和平均數(shù)的差的平方的平均數(shù)
print(np.var(arr))
#求標準差:方差的平方根
print(np.std(arr))
#求最大值和最小值的索引下標
#如果是多維數(shù)組,將多維數(shù)組合并成一維數(shù)組兰绣,再找出最大值索引下標
arr = np.arange(10)
print(arr)
print(np.argmax(arr))
print(np.argmin(arr))
#返回一維數(shù)組世分,數(shù)組每個元素都是之前每個元素的累加和
print(np.cumsum(arr))
#返回一個一維數(shù)組,數(shù)組的每一個元素都是之前所有元素的累加積
print(np.cumprod(arr))