python科學計算庫-numpy


一、numpy

用NumPy快速處理數據

NumPy 是一個運行速度非常快的數學庫,主要用於數組計算,包含:
矩陣運算

 jupyter快捷鍵

 

 

 1、ndarray 對象

ndarray 實際上是多維數組的含義。

在 NumPy 數組中,維數稱為秩(rank),一維數組 的秩為
1,二維數組的秩為 2,以此類推。在 NumPy 中,每一個線性的數組稱為一個軸 (axes),其實秩就是描述軸的數量。

創建數組

 

 

 

# 引入numpy模塊
import numpy as np
# 創建二維數組
array = np.array([[1,2,3],[4,5,6]])
print(array,type(array))

[[1 2 3]
 [4 5 6]] <class 'numpy.ndarray'>

獲取數組屬性值

# ndim 維度的數量
print('維度的數量',array.ndim)
# 維度
print('維度',array.shape)
# 數組元素的個數
print('數組元素的個數',array.size)
# 對象元素的類型
print('對象元素的類型',array.dtype)
# 對象每個元素的大小、以字節為單位
print('對象每個元素的大小、以字節為單位',array.itemsize)
# 對象內存信息
print(' 對象內存信息',array.flags)

特殊函數創建

關鍵字 
array:創建數組
dtype:指定數據類型
zeros:創建數據全為0
ones:創建數據全為1
empty:創建數據接近0
arange:按指定范圍創建數據
linspace:創建線段

# 創建全零數組
# 數據全為0,3行4列 
# 默認為float
a = np.zeros((3,4))
print(a)
print(a.dtype)
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
float64


# 創建全為1的數組, 同時也能指定這些特定數據的 dtype:
a = np.ones((3,4),dtype=np.int)
print(a)
print(a.dtype)
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
int32

# 創建全空數組, 其實每個值都是接近於零的數:
a = np.empty((3,4))
print(a)
print(a.dtype)

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
float64

# 用 arange 創建連續數組:
# 10-19 的數據,2步長  arange用來創建數組
a = np.arange(10,20,2)
print(a)
print(a.dtype)

[10 12 14 16 18]
int32


# 使用 reshape 改變數據的形狀
# 3行4列 ,0到11
a = np.arange(12).reshape((3,4))
print(a)
print(a.dtype)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
int32


# 用 linspace 創建線段型數據:
# 開始端為1 ,結束端10,且分割成20個數據,生成線段
a = np.linspace(1,10,20)
print(a)
print(a.dtype)
View Code

結構數組

# 結構數組
import numpy as np
# 定義數組結構
# persontype = np.dtype({
# 'names':['name', 'age', 'chinese', 'math', 'english'],
# 'formats':['S32','i', 'i', 'i', 'f']})

# 也可以這樣定義
persontype = np.dtype(
[('name','S32'),( 'age','i'), ('chinese','i'), ('math','i'), ('english','i')]
)


peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
dtype=persontype)
print(peoples)
ages = peoples[:]['age']
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']
print(np.mean(ages))
print(np.mean(chineses))
print(np.mean(maths))
print(np.mean(englishs))
28.25
77.5
93.25
93.5

創建隨機數組

random.random()函數是這個模塊中最常用的方法了,它會生成一個隨機的浮點數,范圍是在0.0~1.0之間。

指定范圍和形狀的隨機浮點數數組

 

 

 數組的數據類型

 算數運算

通過 NumPy 可以自由地創建等差數組,同時也可以進行加、減、乘、除、求 n 次方和取余數。
# 通過 NumPy 可以自由地創建等差數組,同時也可以進行加、減、乘、除、求 n 次方和取余數。

x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)
print('x1:',x1)
print('x2:',x2)
print(np.add(x1, x2))
print(np.subtract(x1, x2))
print(np.multiply(x1, x2))
print(np.divide(x1, x2))
print(np.power(x1, x2))
print(np.remainder(x1, x2))

x1: [1 3 5 7 9]
x2: [1. 3. 5. 7. 9.]
[ 2.  6. 10. 14. 18.]
[0. 0. 0. 0. 0.]
[ 1.  9. 25. 49. 81.]
[1. 1. 1. 1. 1.]
[1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05
 3.87420489e+08]
[0. 0. 0. 0. 0.]

在取余函數里,你既可以用 np.remainder(x1, x2),也可以用 np.mod(x1, x2),結果是一
樣的。

ndarray數組運算

 

(1)數組與標量之間的運算作用於數組的每一個元素

 

a = np.arange(24).reshape(6,4)
print(a+1)
print(a*10)

 


# 計算A^2+B^2
import numpy as np
A=[1,2,3]
B=[4,5,6]
a1 = np.array(A)
a2 = np.array(B)
a1**2+a2**2

--------------------------------------------------------------------------------------------

統計函數

最大值、最小值、平均值,是否符合正態分布,方差、標准差多少等等。它們可以讓你更清楚地對這組數據有認知。

 計數組 / 矩陣中的最大值函數 amax(),最小值函數 amin()

import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(np.amin(a))
print(np.amin(a,0))
print(np.amin(a,1))
print(np.amax(a))
print(np.amax(a,0))
print(np.amax(a,1))
對於一個二維數組 a,amin(a) 指的是數組中全部元素的最小值,

amin(a,0) 是延着 axis
=0 軸的最小值,axis=0 軸是把元素看成了 [1,4,7], [2,5,8], [3,6,9] 三個元素,所以最小值為 [1,2,3],


amin(a,1) 是延着 axis=1軸的最小值,
axis
=1 軸是把元素看成了 [1,2,3], [4,5,6], [7,8,9] 三個元素,所以最小值為 [1,4,7]。

同理 amax() 是計算數組中元素沿指定軸的最大值。

統計最大值與最小值之差 ptp()

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(np.ptp(a))
print(np.ptp(a,0))
print(np.ptp(a,1))

統計數組的百分位數 percentile()

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(np.percentile(a, 50))
print(np.percentile(a, 50, axis=0))
print(np.percentile(a, 50, axis=1))
同樣,percentile() 代表着第 p 個百分位數,這里 p 的取值范圍是 0-100,如果 p=0,
那么就是求最小值,如果 p=50 就是求平均值,如果 p=100 就是求最大值。同樣你也可
以求得在 axis=0 和 axis=1 兩個軸上的 p% 的百分位數。

統計數組中的中位數 median()、平均數 mean()

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 求中位數
print(np.median(a))
print(np.median(a, axis=0))
print(np.median(a, axis=1))
# 求平均數
print(np.mean(a))
print(np.mean(a, axis=0))
print(np.mean(a, axis=1))

統計數組中的加權平均值 average()

a = np.array([1,2,3,4])
wts = np.array([1,2,3,4])
print(np.average(a))
print(np.average(a,weights=wts))
average() 函數可以求加權平均,加權平均的意思就是每個元素可以設置個權重,默認情
況下每個元素的權重是相同的,所以 np.average(a)=(1+2+3+4)/4=2.5,你也可以指定
權重數組 wts=[1,2,3,4],這樣加權平均 np.average(a,weights=wts)=
(1*1+2*2+3*3+4*4)/(1+2+3+4)=3.0。

統計數組中的標准差 std()、方差 var()

a = np.array([1,2,3,4])
print(np.std(a))
print(np.var(a))

NumPy 排序

 

 

a = np.array([[4,3,2],[2,4,1]])
print(np.sort(a))
print()
print(np.sort(a, axis=None))
print()
print(np.sort(a, axis=0))
print()
print(np.sort(a, axis=1))

 求和sum

# 求和
a2 = np.arange(24).reshape(4,6)
a2
print(a2.sum())#整體求和
print(a2.sum(axis=0))#對縱向求和
print(a2.sum(axis=1))#對橫向求和

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM