最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

玩數(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)類型為浮點(diǎ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) 類型為浮點(diǎn)型
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獲取網(wǎng)頁狀態(tài)碼示例

    python獲取網(wǎng)頁狀態(tài)碼示例

    這篇文章主要介紹了python獲取網(wǎng)頁狀態(tài)碼示例,只需要2行代碼就可實(shí)現(xiàn)想要的功能,需要的朋友可以參考下
    2014-03-03
  • 深入學(xué)習(xí)python多線程與GIL

    深入學(xué)習(xí)python多線程與GIL

    這篇文章主要介紹了深入學(xué)習(xí)python多線程與GIL,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Selenium及python實(shí)現(xiàn)滾動操作多種方法

    Selenium及python實(shí)現(xiàn)滾動操作多種方法

    這篇文章主要介紹了Selenium及python實(shí)現(xiàn)滾動操作多種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Python使用pymssql連接SQL?SEVER數(shù)據(jù)庫全流程

    Python使用pymssql連接SQL?SEVER數(shù)據(jù)庫全流程

    SQL Server是微軟推出的重量級的數(shù)據(jù)庫,目前有多個版本,如2000、2008、2012等,下面這篇文章主要給大家介紹了關(guān)于Python使用pymssql連接SQL?SEVER數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • python實(shí)現(xiàn)電子詞典

    python實(shí)現(xiàn)電子詞典

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)電子詞典的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Django處理Ajax發(fā)送的Get請求代碼詳解

    Django處理Ajax發(fā)送的Get請求代碼詳解

    在本篇文章里小編給大家整理了關(guān)于Django處理Ajax發(fā)送的Get請求代碼知識點(diǎn),有需要的朋友們參考學(xué)習(xí)下。
    2019-07-07
  • Python+OpenCV自制AI視覺版貪吃蛇游戲

    Python+OpenCV自制AI視覺版貪吃蛇游戲

    這篇文章為大家詳細(xì)介紹了如何使用mediapipe+opencv自制AI視覺版的貪吃蛇小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-03-03
  • Python自動化運(yùn)維和部署項目工具Fabric使用實(shí)例

    Python自動化運(yùn)維和部署項目工具Fabric使用實(shí)例

    Fabric是一個Python庫,只要目標(biāo)機(jī)器支持ssh訪問,就可以借助fabric來進(jìn)行遠(yuǎn)程操作(如在host1上對host2遠(yuǎn)程運(yùn)行shell命令),顯然,由于fabric是個Python package,故其它Python package都可以被import到fabric特有的fabfile.py腳本中
    2016-09-09
  • Python詳細(xì)講解圖像處理的而兩種庫OpenCV和Pillow

    Python詳細(xì)講解圖像處理的而兩種庫OpenCV和Pillow

    這篇文章介紹了Python使用OpenCV與Pillow分別進(jìn)行圖像處理的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 24式加速你的Python(小結(jié))

    24式加速你的Python(小結(jié))

    這篇文章主要介紹了24式加速你的Python(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06

最新評論

池州市| 六安市| 黔西| 图片| 岳阳市| 湘潭市| 琼中| 陈巴尔虎旗| 色达县| 林口县| 多伦县| 邮箱| 邵阳市| 东兰县| 宁安市| 错那县| 若尔盖县| 康定县| 镇坪县| 沭阳县| 内江市| 兴安盟| 奉贤区| 静安区| 平乡县| 广州市| 普定县| 太白县| 新闻| 罗城| 昌邑市| 凤台县| 漳平市| 芒康县| 台北市| 板桥市| 大丰市| 九龙城区| 沙湾县| 贵阳市| 卓尼县|