欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

玩數(shù)據(jù)必備Python庫之numpy使用詳解

 更新時間:2022年02月10日 10:01:46   作者:Buckletime  
NumPy提供了許多高級的數(shù)值編程工具,如矩陣數(shù)據(jù)類型、矢量處理,以及精密的運(yùn)算庫,下面這篇文章主要給大家介紹了關(guān)于玩數(shù)據(jù)必備Python庫之numpy使用的相關(guān)資料,需要的朋友可以參考下

前言

numpy 庫是 一個科學(xué)計算庫, 使用方法:import numpy as np

  • 用于快速處理任意維度的數(shù)組,存儲的對象是ndarray
  • 用于矩陣運(yùn)算,存儲的對象是matrix

1. ndarray介紹

1. ndarray的屬性

item = np.array([[1, 2], [3, 4], [5, 6]])
# ndarray的屬性
print('shape 表示數(shù)組維度的元組', item.shape)  # (3, 2)
print('ndim 表示數(shù)組維數(shù)', item.ndim)  # 2
print('size 表示數(shù)組中元素個數(shù)', item.size)  # 6
print('itemsize 表示一個元素所占字節(jié)大小', item.itemsize)  # 4
print('dtype 表示數(shù)字元素的類型', item.dtype)  # int32

2. ndarray的形狀

ndarray可以是任意維度的數(shù)組

# ndarray的形狀
a1 = np.array([1, 2])
a2 = np.array([[1, 2], [3, 4]])
a3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print('a1是{0}維數(shù)組'.format(a1.ndim))
print('a2是{0}維數(shù)組'.format(a2.ndim))
print('a3是{0}維數(shù)組'.format(a3.ndim))
# a1是1維數(shù)組
# a2是2維數(shù)組
# a3是3維數(shù)組

3. ndarray的類型

創(chuàng)建ndarray對象時,可以使用dtype參數(shù)指定ndarray的類型

# ndarray的類型
item = np.array([[1, 2], [3, 4]], dtype=np.str_)	# 設(shè)置類型為字符串
print(item)
#[['1' '2']
# ['3' '4']]

2. ndarray的基本操作

生成數(shù)組

1. 生成0和1數(shù)組

# 生成一個3行4列的數(shù)組,元素為0。注意:默認(rèn)類型為浮點型 0.
arr_zero = np.zeros([3, 4], dtype=int)
# 生成一個3行4列的數(shù)組,元素為1
arr_one = np.ones_like(arr_zero)

2. 從現(xiàn)有數(shù)組生成

array()

a = np.array([[1, 2, 3], [4, 5, 6]])
array = np.array(a)
print(array)

asarray()

asarray = np.asarray(a)
print(asarray)

array()和asarray()的區(qū)別

a[0, 0] = 100   # 修改元素值
print(array)    # array是深拷貝,修改原數(shù)據(jù),現(xiàn)數(shù)據(jù)不變。相當(dāng)于復(fù)制
print(asarray)  # asarray是淺拷貝,修改原數(shù)據(jù),現(xiàn)數(shù)據(jù)改變。相當(dāng)于創(chuàng)建快捷方式
# [[1 2 3]
#  [4 5 6]]
# [[100   2   3]
#  [  4   5   6]]

3. 生成固定范圍的數(shù)組

linspace(start, stop, num, endpoint) 固定個數(shù),步長相等

# 從0到100,生成11個元素,默認(rèn)包含stop值100,endpoint=True
arr = np.linspace(0, 100, 11)
print(arr)
# [  0.  10.  20.  30.  40.  50.  60.  70.  80.  90. 100.]

arange(start, stop, step, dtype) 固定步長

# 從0到50,固定步長10生成int類型元素,不包括stop值
arr2 = np.arange(0, 50, 10, np.int32)
print(arr2)
# [ 0 10 20 30 40]

logspace(start, stop, num) 生成10的N次冪的數(shù)據(jù)

# 從10^0開始到10^3結(jié)束,生成4個元素
arr3 = np.logspace(0, 3, 4)
print(arr3)
# [   1.   10.  100. 1000.]

4. 生成隨機(jī)數(shù)組 np.random模塊

4.1. 均勻分布生成

rand(d0, d1, … , dn) 返回一個[0.0, 1.0)內(nèi)的一組均勻分布的數(shù)據(jù)

a1 = np.random.rand(2, 3)   
print(a1)

uniform(low, high, size) 從一個均勻分布[low, high)中隨機(jī)采樣,可替代rand()方法 常用

a2 = np.random.uniform(1, 10, (2, 3))
print(a2)

randint(low, high, size) 從一個均勻分布[low, high)中隨機(jī)采樣,生成N維整數(shù)數(shù)組

a3 = np.random.randint(1, 10, (2, 3))
print(a3)

生成均勻分布數(shù)據(jù)的小案例

import matplotlib.pyplot as plt

# 1.準(zhǔn)備數(shù)據(jù) 在[0,1)范圍內(nèi)生成 100000000 個數(shù)據(jù)
x = np.random.uniform(0, 1, 100000000)
# 2.畫布
plt.figure(figsize=(20,8), dpi=100)
# 3.繪制 x為數(shù)據(jù), bins是要劃分的區(qū)間數(shù)
plt.hist(x=x, bins=1000)
# 4.顯示
plt.show()

數(shù)據(jù)分布如圖所示:

4.2. 正態(tài)分布生成

randn(d0, d1, … , dn) 從標(biāo)準(zhǔn)正態(tài)分布中返回一個或多個樣本值

a1 = np.random.randn(2, 3)   
print(a1)

normal(loc, scale, size) loc均值,scale標(biāo)準(zhǔn)差,默認(rèn)size=None,返回一個值 常用

a2 = np.random.normal(1.75, 1, (2, 3))
print(a2)

standard_normal(size) 返回指定形狀的標(biāo)準(zhǔn)正態(tài)分布的數(shù)組

a3 = np.random.standard_normal((2, 3))
print(a3)

生成正態(tài)分布數(shù)據(jù)的小案例

# 1.準(zhǔn)備數(shù)據(jù)
x = np.random.normal(1.75, 1, 100000000)
# 2.畫布
plt.figure(figsize=(20,8), dpi=100)
# 3.繪制 x為數(shù)據(jù), bins是要劃分的區(qū)間數(shù)
plt.hist(x=x, bins=1000)
# 4.顯示
plt.show()

數(shù)據(jù)分布如圖所示:

數(shù)組索引、切片

  • 直接索引,先對行索引,再對列索引
  • 高維數(shù)組索引,從宏觀到微觀
# 生成一個5行4列的隨機(jī)數(shù)組,范圍在40~100
score = np.random.randint(40, 100, (5, 4))
print(score)
# 獲取第一行,第三列的值
print(score[0, 2])
# 獲取前兩行,前三列的值,注意切片是[),左閉右開
print(score[0:2, 0:3])

修改數(shù)組形狀

reshape(shape[,order]) 返回一個新數(shù)組,原數(shù)組不變,行列順序不變

# 生成一個4行5列的隨機(jī)數(shù)組,范圍在40~100
score = np.random.randint(40, 100, (4, 5))
# 將數(shù)組修改為5行4列
a1 = score.reshape([5, 4])
print(a1)
# 若行為-1,表示行不固定,根據(jù)列的大小修改,但必須保證列的大小是總數(shù)的一個因數(shù),否則會報錯
a2 = score.reshape([-1, 10])    # 元素總數(shù)為20,[-1, 10]表示 20/10 修改為2行10列
print(a2)

resize(shape[,order]) 無返回,改變原數(shù)組,行列順序不變

# 將數(shù)組修改為5行4列
score.resize([5, 4])
print(score)

T 返回一個新數(shù)組,原數(shù)組不變,行列順序改變

print(score.T)

修改數(shù)組類型

astype(dtype)

# 生成一個4行5列的隨機(jī)數(shù)組,范圍在[1,5) 類型為浮點型
score = np.random.uniform(1, 5, (4, 5))
# 修改數(shù)組類型為int
print(score.astype(np.int_))

數(shù)組去重

np.unique()

arr = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
print(np.unique(arr))
# [1 2 3 4 5 6]

刪除元素

np.delete(arr,obj,axis)

  • arr:ndarray數(shù)組
  • obj:刪除元素的位置或者條件
  • axis:指定刪除行或者列

3. ndarray運(yùn)算

邏輯運(yùn)算

  • 大于、小于直接進(jìn)行比較
  • bool賦值,通過布爾索引進(jìn)行賦值
arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
# 邏輯判斷 如果值大于0,標(biāo)記為True,否則為False
print(arr > 0)  # 大于、小于 直接進(jìn)行比較
# bool賦值,通過布爾索引進(jìn)行賦值
arr[arr > 0] = 2    # 將大于0的元素賦值為2
print(arr)
# [[ 1.61640357 -0.21286798  0.67147044  1.07099177]
#  [ 0.87844707 -0.30592255  2.51825124 -0.53368643]
#  [ 0.85427772 -1.21688459 -0.81051012  0.77601911]]
# [[ True False  True  True]
#  [ True False  True False]
#  [ True False False  True]]
# [[ 2.         -0.21286798  2.          2.        ]
#  [ 2.         -0.30592255  2.         -0.53368643]
#  [ 2.         -1.21688459 -0.81051012  2.        ]]

通用判斷函數(shù)

  • np.all() 所有元素都滿足才會返回True
  • np.any() 任何一個元素滿足都會返回True
# 通用判斷函數(shù)
arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
# np.all()  所有元素都滿足才會返回True
print(np.all(arr > 0))
# np.any()  任何一個元素滿足都會返回True
print(np.any(arr > 0))

# [[ 2.96745424  1.13869564  2.42304826  1.00264569]
#  [ 1.09160352  1.67433992  0.80692908  0.87226686]
#  [-0.11395954 -0.10808592  2.67034408  1.06746313]]
# False
# True

三元運(yùn)算符

  • np.where(表達(dá)式, value1, value2) 表達(dá)式為True,執(zhí)行value1, 否則執(zhí)行value2
  • 復(fù)合邏輯需要結(jié)合 np.logical_and() 或 np.logical_or() 使用
# 三元運(yùn)算符
arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
# np.where(表達(dá)式, value1, value2)     表達(dá)式為True,執(zhí)行value1, 否則執(zhí)行value2
print(np.where(arr > 0, 1, 0))
# 復(fù)合邏輯需要結(jié)合 np.logical_and() 或 np.logical_or() 使用
print(np.where(np.logical_and(arr > 0.5, arr < 1), 1, 0))   # 大于0.5并且小于1
print(np.where(np.logical_or(arr > 0.5, arr < -0.5), 1, 0))   # 大于0.5或者小于-0.5
# [[-0.55217725  1.50314214  0.35100255  1.76121231]
#  [-0.47892572  1.7304177   1.19885493  0.28415964]
#  [ 0.83477297  0.76201994  0.40926624  0.95691155]]
# [[0 1 1 1]
#  [0 1 1 1]
#  [1 1 1 1]]
# [[0 0 0 0]
#  [0 0 0 0]
#  [1 1 0 1]]
# [[1 1 0 1]
#  [0 1 1 0]
#  [1 1 0 1]]

統(tǒng)計運(yùn)算

  • min() 最小值
  • max() 最大值
  • mean() 均值
  • std() 標(biāo)準(zhǔn)差
  • var() 方差
  • argmin() 最小值的下標(biāo)
  • argmax() 最大值的下標(biāo)

統(tǒng)計時,還可以指定統(tǒng)計軸axis(行或者列),在每個軸上進(jìn)行統(tǒng)計, axis軸的取值并不固定,在本例中,axis 0表示列,1表示行

arr = np.random.normal(0.75, 1, (3, 4))
print(arr)
print(np.max(arr))  # 最大值
print(np.max(arr, axis=1))  # 每行的最大值
# [[ 0.25961034  0.56145924  0.71150806 -0.17447214]
#  [ 0.70701591 -0.16176053  0.24923484  0.48678436]
#  [ 1.21328659 -0.15891988  1.69161668  1.42672955]]
# 1.6916166794484437
# [0.71150806 0.70701591 1.69161668]

數(shù)組運(yùn)算

數(shù)組與標(biāo)量運(yùn)算

對應(yīng)元素直接進(jìn)行運(yùn)算

arr = np.array([1, 0, 5])
print(arr)
print(arr + 2)
print(arr * 2)
# [1 0 5]
# [3 2 7]
# [ 2  0 10]

數(shù)組與數(shù)組運(yùn)算

數(shù)組之間的運(yùn)算需要滿足廣播機(jī)制才可以運(yùn)算,兩個條件

  • 維度相等
  • shape(其中相對應(yīng)的一個地方為1)

條件可以表示為:

可以運(yùn)算:
A       (3d array): 5 x 4 x 7
B       (3d array): 5 x 1 x 1
Result  (3d array): 5 x 4 x 7

A       (4d array): 9 x 1 x 7 x 1
B       (3d array):     8 x 1 x 5
Result  (4d array): 9 x 8 x 7 x 5

A       (2d array): 5 x 4
B       (1d array):     1
Result  (2d array): 5 x 4

不可以運(yùn)算:
A       (1d array): 10
B       (1d array): 12
A       (2d array): 2 x 1
B       (3d array): 4 x 3 x 2
arr = np.array([1, 0, 5])
arr2 = np.array([2, 1, 1, 4])
print(arr + arr2)
# ValueError: operands could not be broadcast together with shapes (3,) (4,)

a = np.array([[1, 2, 3, 2, 1, 4]])  # A         (2d array):     1 x 6
b = np.array([[[1], [3], [4]]])     # B         (3d array): 1 x 3 x 1
                                    # Result    (3d array): 1 x 3 x 6
print(a + b , '新數(shù)組的shade是{}'.format((a+b).shape))
# [[[2 3 4 3 2 5]
#   [4 5 6 5 4 7]
#   [5 6 7 6 5 8]]] 新數(shù)組的shade是(1, 3, 6)

4. matrix 矩陣介紹

矩陣和向量

矩陣(matrix),和數(shù)組的區(qū)別:矩陣只能是二維的,數(shù)組可以是多維的

向量:向量是一種特殊的矩陣,一般都是列向量

加法和常量乘法

矩陣的加法:行列數(shù)相等才能相加

矩陣的常量乘法:每個元素都要乘

矩陣間的乘法

兩個矩陣相乘,只有第一個矩陣的列數(shù)等于第二個矩陣的行數(shù)才能相乘,即:(M行,N列) × (N行,L列) = (M行,L列)

矩陣乘法的性質(zhì)

(1) 結(jié)合律: (AB)C=A(BC)

(2) 分配律:(左分配律)C(A+B)=CA+CB
       ?。ㄓ曳峙渎桑?A+B)C=AC+BC

(3) 對常量的結(jié)合性:k(AB)=(kA)B=A(kB)

單位矩陣

  • 從左上角到右下角的對角線均為1,其余元素都為0的矩陣

逆矩陣

  • 矩陣A × 矩陣B = 單位矩陣,則A和B互為逆矩陣

轉(zhuǎn)置矩陣

  • 行和列互換的矩陣

5. Python中矩陣運(yùn)算

  • np.matmul() 兩個矩陣相乘
  • np.dot() 兩個矩陣相乘或者矩陣與標(biāo)量相乘
arr1 = np.random.randint(1, 7, (3, 2)) # 3 x 2 矩陣
arr2 = np.random.randint(2, 5, (2, 4)) # 2 x 4 矩陣
print(arr1)
print(arr2)
print(np.matmul(arr1, arr2))  # 結(jié)果為 3 x 4 矩陣
# print(np.dot(arr1, arr2))

# np.dot() 支持與標(biāo)量相乘
print(np.dot(arr1, 5))  # 結(jié)果為 3 x 2 矩陣
# [[6 5]
#  [2 1]
#  [5 1]]
# [[2 2 3 4]
#  [4 2 3 2]]
# [[32 22 33 34]
#  [ 8  6  9 10]
#  [14 12 18 22]]
# [[30 25]
#  [10  5]
#  [25  5]]

擴(kuò)展:正態(tài)分布簡介

正態(tài)分布是一種概率分布。正態(tài)分布是具有兩個參數(shù)μ和σ²的連續(xù)型隨機(jī)變量的分布,第一參數(shù)μ是服從正態(tài)分布的隨機(jī)變量的均值,第二個參數(shù)σ²是此隨機(jī)變量的方差,所以正態(tài)分布記作N(μ,σ²)

正態(tài)分布圖

均值:圖形的左右位置

方差:圖形是瘦還是胖

  • 方差越小,圖形越瘦高,數(shù)據(jù)越集中
  • 方差越大,圖形越矮胖,數(shù)據(jù)越分散

方差

  • 方差是在概率論和統(tǒng)計方差衡量隨機(jī)變量或一組數(shù)據(jù)時離散程度的度量。

總結(jié)

到此這篇關(guān)于玩數(shù)據(jù)必備Python庫之numpy使用詳解的文章就介紹到這了,更多相關(guān)Python庫之numpy使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用?Python?Timedelta?月份計算日期

    如何使用?Python?Timedelta?月份計算日期

    在本篇文章中,我們將通過?timedelta?學(xué)習(xí)如何在?Python?中使用日期時間,?我們將了解如何計算當(dāng)前日期或任何其他日期六個月后的日期,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 理解python多線程(python多線程簡明教程)

    理解python多線程(python多線程簡明教程)

    這篇文章主要介紹了理解python多線程,一個快速理解python多線程的簡明教程,需要的朋友可以參考下
    2014-06-06
  • python Requsets下載開源網(wǎng)站的代碼(帶索引 數(shù)據(jù))

    python Requsets下載開源網(wǎng)站的代碼(帶索引 數(shù)據(jù))

    這篇文章主要介紹了python Requsets下載開源網(wǎng)站的代碼(帶索引 數(shù)據(jù)),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python使用PyMongo4.x操作MongoDB的教程分享

    Python使用PyMongo4.x操作MongoDB的教程分享

    PyMongo是一個Python編程語言中用于連接和操作MongoDB數(shù)據(jù)庫的庫,它提供了豐富的功能和API,使開發(fā)者能夠在Python中輕松地進(jìn)行MongoDB的數(shù)據(jù)交互和管理,本文給大家總結(jié)了Python如何使用PyMongo4.x操作MongoDB,需要的朋友可以參考下
    2023-09-09
  • matplotlib對象拾取事件處理的實現(xiàn)

    matplotlib對象拾取事件處理的實現(xiàn)

    這篇文章主要介紹了matplotlib對象拾取事件處理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python3實現(xiàn)的簡單三級菜單功能示例

    Python3實現(xiàn)的簡單三級菜單功能示例

    這篇文章主要介紹了Python3實現(xiàn)的簡單三級菜單功能,涉及Python用戶交互以及針對json格式數(shù)據(jù)的遍歷、讀取、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • python批量將excel內(nèi)容進(jìn)行翻譯寫入功能

    python批量將excel內(nèi)容進(jìn)行翻譯寫入功能

    這篇文章主要介紹了python批量將excel內(nèi)容進(jìn)行翻譯寫入功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • python 命令行傳參方法總結(jié)

    python 命令行傳參方法總結(jié)

    這篇文章主要介紹了python 命令行傳參方法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python的Flask開發(fā)框架簡單上手筆記

    Python的Flask開發(fā)框架簡單上手筆記

    這篇文章主要介紹了Python的Flask開發(fā)框架的入門知識整理,Flask是一款極輕的Python web開發(fā)框架,需要的朋友可以參考下
    2015-11-11
  • 淺談Python3.10 和 Python3.9 之間的差異

    淺談Python3.10 和 Python3.9 之間的差異

    多年來,Python 進(jìn)行了大量升級,并且在新版本中添加了許多功能。本文就詳細(xì)的介紹 一下Python3.10 和 Python3.9差異,感興趣的朋友可以了解一下
    2021-09-09

最新評論