本篇文章我們繼續(xù)帶大家學習Numpy的數據操作部分,主要給大家系統(tǒng)的介紹一下Numpy中常用的方法和屬性。
雖然我們前面也用過一些方法,但是我們沒有系統(tǒng)的給大家介紹,本次我們分成兩部分,詳細的給大家介紹一下Numpy中的一些方法和使用。
Numpy的常用方法
Ndarray對象的常用方法
Numpy的常用方法
生成函數
生成ndarray對象的函數,注意所有np即為numpy的簡寫。
np.arange(n): 生成指定范圍的一個數據序列,返回的是ndarray對象。其實np.arange()的使用很類似內置函數range(),只不過range()函數生成的數據類似一個列表,而np.arange()生成的是ndarray對象。
np.array(list):將一個列表轉成ndarray對象。
import numpy as np #導入numpy模塊,起別名為np
import warnings
warnings.filterwarnings("ignore") # 忽略警告信息
data = np.arange(10)
display(data)
data1= list(range(10))
display(type(data1))
data1=np.array(data1)
display(data1)
# 當然使用np.array()還可以創(chuàng)建二維的數組
array = [[1,2],[3,4],[5,6],[7,8],[9,10]]
array = np.array(array)
display(array)
# 如果是一維數組:向量
# 如果是二維數組,那么就看做是一個矩陣
結果:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
list
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
使用np.ones()、np.zeros()、np.full() 生成ndarray對象
np.ones(N) : 生成一個N長度的一維全1的ndarray對象
np.zeros(N): 生成一個N長度的一維全0的ndarray對象
np.full(N) : 生成一個N長度的一維值全為指定值的ndarray對象
import numpy as np
array1 = np.ones((3,4)) # 創(chuàng)建值全為1的數組。
display(array1)
array2 = np.zeros((3,4)) # 創(chuàng)建值全為0的數組。
display(array2)
array3 = np.full((3,4),6) # 創(chuàng)建值全為指定值的數組。
display(array3)
結果:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
array([[6, 6, 6, 6],
[6, 6, 6, 6],
[6, 6, 6, 6]])
大家可以發(fā)現ones和zeros得到的數組是浮點型的。那如何設置它的數據類型呢?
A. 在聲明的時候可以使用,比如array1 = np.ones((3,4),dtype=np.int)
B. 使用ndarray對象.astype(數據類型)進行類型轉換
Numpy的數據類型有哪些呢?
當然若想得到一些隨機數組成的數組,我們還可以使用numpy.random中的方法完成
np.random.rand 生成指定形狀的0~1之間的隨機數
np.random.random 生成指定形狀的0~1之間的隨機數
np.random.randn 標準正態(tài)分布
np.random.normal 指定均值和方法的正態(tài)分布
np.random.randint 生成指定數值范圍內的隨機整數
np.random.seed 按照種子來生成隨機數,種子一樣,則生成的結果必一致
np.random.shuffle 打亂數組元素順序
np.random.uniform 均勻分布
np.random.choice 按照指定概率從指定集合中,生成隨機數
選出幾個給大家介紹一下
np.random.rand 與np.random.random兩者類似,都是產生0~1之間的隨機數,但是函數的參數不一樣。
import numpy as np
d1 = np.random.random((2,3)) #注意區(qū)別多(少)了一對()
d2 = np.random.rand(2,3)
display(d1,d2)
np.random.randn() 服從正態(tài)分布的從0~1之間的隨機數
dn = np.random.randn(2,3)
display(dn)
np.random.normal() 指定均值和方差的正態(tài)分布
# loc:float 此概率分布的均值(對應著整個分布的中心centre)
# scale:float 此概率分布的標準差(對應于分布的寬度,scale越大越矮胖,scale越小,越瘦高)
# size:int or tuple of ints 輸出的shape,默認為None,只輸出一個值
dn= np.random.normal(loc=4, scale=0.01, size=4)
dn1= np.random.normal(loc=4, scale=0.01, size=(2,4))
display(dn,dn1)
np.random.randint() 隨機整數
# 在1-10范圍里,隨機生成5個int32類型的數值,生成的結果集可能出現重復數值 arr1 = np.random.randint(1, high=10, size=5, dtype=np.int32) display(arr1) # 生成一個指定范圍[-10,0]的隨機二維數組 arr2 = np.random.randint(-10, high=10, size=(4, 6), dtype=np.int32) display(arr2)
np.random.choice() 從指定數據集中,隨機抽選一個數據
# 從數值集合中,按照指定概率生成隨機數,參數P的總和一定得是1
arr = np.random.choice([0,3,5,7,8,9], p=[0.1, 0.2, 0.3, 0.4,0.2,0.5]) display(arr)
數學函數與運算操作
數學相關
Numpy提供了許多數學操作相關函數,常用的函數有:
abs / fabs :絕對值
ceil / floor :向上/向下取整
log / log2 / log10 :對數
exp :e為底的指數
modf :將浮點數num分解成整數部分和小數部分。
sin / sinh / cos / cosh :正玄、余玄...
sqrt :開平方
import numpy as np
arr = np.array([[-1,1.2,0.8,-3.9],[-6,1,-1.8,0.9]])
display(arr)
#絕對值
a = np.abs(arr)
display(a)
#向上/向下取整
b = np.ceil(arr)
b1 = np.floor(arr)
display(b,b1)
# 對數函數
c = np.log(arr)
display(c)
# e為底數的指數函數
d = np.exp(arr)
display(d)
# 浮點數拆分成 整數 和 浮點數 兩部分
# 返回一個元組,含有兩個元素(數組類型),第一個元素返回小數部分,第二個元素返回整數部分。
e = np.modf(arr)
display(e)
#開平方
f = np.sqrt(arr)
display(f)
運算相關的有:
數組與數(一維數組與一維數組)的運算(加+、減、乘*、除/、取整//、取模%、平方 * * 、立方 * * * ):
加:“+” 或者np.add(a, b)
減:“-” 或者np.subtract(a, b)
乘:“*” 或者np.multiply(a, b)
除:“/” 或者np.divide(a, b)
次方:“ ** ” ,如2^7=2**7
取整函數:“ // ”或者 np.ceil(), np.floor(), np.trunc()/fix(), np.rint(), np.around()
取模:“%”或者np.mod()和np.remainder()
矩陣乘積:np.dot(a, b)
判斷: > 、 >= 、< 、 <= 、 == 、 !=
條件:all() 、any()
邏輯條件: & 、 | 、 !
上篇文章我們提到過運算相關的符號,當然每個符號還有對應的方法。在Numpy中的運算基本都是遵守廣播機制的?,F在我們在看一下關系運算符:
import numpy as np
arr1 = np.array([1,2,3,4,5])
arr2 = np.array([0,2,-5,-4,8])
display(arr1>arr2,arr1<arr2,arr1!=arr2,arr1==arr2)< p="">
結果如下:
array([ True, False, True, True, False]) array([False, False, False, False, True]) array([ True, False, True, True, True]) array([False, True, False, False, False])
其中all()和any()返回的也是bool類型的結果,any()表示只要有一個True 就返回 True,all()表示所有為True 就返回 True
display(np.all(arr1),np.any(arr2))
邏輯運算符的使用:
np.all(arr1<0) & np.all(arr2>0)
數組的鏈接(拼接、組合)和拆分
np.concatenate 對多個數組按指定軸的方向進行連接。
np.stack / np.vstack / np.hstack / np.dstack / np.tile 組合
np.split / np.hsplit / np.vsplit / np.dsplit 拆分
本文章不做具體講解,可以參看上篇文章
排序與去重
np.unique( arr,return_index,return_inverse,return_counts,axis) : 返回ndarray中的元素,排除重復元素之后,并進行排序
np.sort( ndarray) : 作為函數使用時,不更改被排序的原始arrays,返回副本
arr = np.array([[1,2,3,4,5,5,6,6,6,8],[2,2,3,4,5,5,6,6,7,9]])
arr = np.unique(arr)
display(arr)
arr1 = np.array([1,5,6,6,6,2,3,4,5])
arr1 = np.sort(arr1)
display(arr1)
結果:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
array([1, 2, 3, 4, 5, 5, 6, 6, 6])
改變形狀與數組扁平化
我們可以通過數組對象的reshape方法(或者np的reshape函數)來改變數組的形狀。
arr1 = np.arange(30).reshape(3, 10)
arr2 = np.arange(30).reshape(5, -1)
# 也可以使用
a = np.arange(10)
b = np.reshape(a, (2,5))
display(b)
我們可以通過調用ravel或flatten方法,對數組對象進行扁平化處理。
np.ravel / ravel
flatten
shape, reshape, resize, ravel
二者的區(qū)別在于,ravel返回原數組的視圖,而flatten返回原數組的拷貝。
x = np.arange(16).reshape(4, 4)
display(x.ravel())
display(np.ravel(x))
display(x.flatten())
結果:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
統(tǒng)計函數
Numpy(或數組對象)具有如下常用的統(tǒng)計函數。
mean / sum / prod(乘積)
max / min / amax / amin
argmax / argmin
std / var
cumsum / cumprod
all / any
median / percentile
import numpy as np
a = np.random.randint(1,20,size=(4,5)) # 隨機生成4行5列的數組
print(np.mean(a)) # 平均值
print(np.max(a)) # 最大值
print(np.min(a)) # 最小值
print(np.sum(a)) # 求和
print(np.prod(a)) # 求積
print(np.std(a)) # 求標準差
print(np.var(a)) # 求方差
print(np.median(a)) # 求中位數
print(np.argmax(a)) # 最大值索引
print(np.argmin(a)) # 最小值索引
當然也可以指定axis進行計算,比如按照軸進行計算,比如axis=0即列軸計算
print(np.mean(a,axis=0)) # 平均值
print(np.max(a,axis=0)) # 最大值
print(np.min(a,axis=0)) # 最小值
print(np.sum(a,axis=0)) # 求和
Ndarray對象屬性與索引使用
Ndarray對象的屬性
ndim 維度數
shape 維度/形狀
dtype 元數數據類型
size 元素個數
itemsize 返回數組元素占用空間的大小。以字節(jié)為單位
nbytes 總字節(jié)數 = size * itemsize
T 數組對象的轉置視圖
flat 扁平迭代器
arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(arr.ndim) #維度數
print(arr.shape) #維度形狀
print(arr.dtype) #元數數據類型
print(arr.size) #元素個數
print(arr.itemsize) # 返回數組元素占用空間的大小。以字節(jié)為單位
print(arr.nbytes) #返回占用空間的總長度
Ndarray對象的切片和索引
當然Numpy的方法有很多也是可以轉成ndarray中的方法使用,比如統(tǒng)計函數
import numpy as np
a = np.random.randint(1,20,size=(4,5)) # 隨機生成4行5列的數組
print(np.mean(a)) # 平均值
print(a.mean()) # 通過ndarray對象調用mean方法
print(np.max(a)) # 最大值
print(a.max()) # 通過ndarray對象調用max方法
import numpy as np
a = np.random.randint(1,20,size=(4,5)) # 隨機生成4行5列的數組
print(np.mean(a)) # 平均值
print(np.max(a)) # 最大值
print(np.min(a)) # 最小值
print(np.sum(a)) # 求和
print(np.prod(a)) # 求積
print(np.std(a)) # 求標準差
print(np.var(a)) # 求方差
print(np.median(a)) # 求中位數
print(np.argmax(a)) # 最大值索引
print(np.argmin(a)) # 最小值索引
更多關于“Python培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業(yè)需求,更科學更嚴謹,每年培養(yǎng)泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。