<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python數(shù)據(jù)處理入門(mén)教程!

          共 10095字,需瀏覽 21分鐘

           ·

          2022-02-21 21:55

          ?Datawhale干貨?
          作者:太子長(zhǎng)琴,算法工程師,Datawhale成員

          本教程內(nèi)容旨在幫助沒(méi)有基礎(chǔ)的同學(xué)快速掌握 numpy 的常用功能,保證日常絕大多數(shù)場(chǎng)景的使用。可作為機(jī)器學(xué)習(xí)或深度學(xué)習(xí)的先修課程,也可作為快速備查手冊(cè)。

          值得一提的是,深度學(xué)習(xí)的各大框架很多 API 和 numpy 也是一脈相承的哦,可以說(shuō) numpy 玩兒熟了,幾個(gè)深度學(xué)習(xí)框架的不少 API 也同時(shí)學(xué)會(huì)了。本文是教程的「第一部分」,從實(shí)際的代碼應(yīng)用出發(fā),講解了Numpy創(chuàng)建到統(tǒng)計(jì)的操作。

          開(kāi)源項(xiàng)目地址:https://github.com/datawhalechina/powerful-numpy

          注:B站有作者傾情講解的視頻教程(B站觀看人數(shù)破萬(wàn)啦?(?>?二次元的Datawhale搜索「巨硬的Numpy」,獲取一手講解。

          教程原則如下:
          ?· 偏實(shí)用高頻 API
          ?·?展示實(shí)際用法
          ?·?簡(jiǎn)單直接

          使用說(shuō)明:內(nèi)容中?(1-5個(gè))表示重要程度,越多越重要;?? 表示需要特別注意的

          提示:使用過(guò)程中無(wú)須過(guò)多關(guān)注 API 各種參數(shù)細(xì)節(jié),教程提供的用法足以應(yīng)付絕大部分場(chǎng)景,更深入的可自行根據(jù)需要探索或?qū)W習(xí)后續(xù)的教程。

          下面正式開(kāi)始講解。
          #?導(dǎo)入?library
          import?numpy?as?np
          #?畫(huà)圖工具
          import?matplotlib.pyplot?as?plt

          創(chuàng)建和生成

          本節(jié)主要介紹 array 的創(chuàng)建和生成。為什么會(huì)把這個(gè)放在最前面呢?主要有以下兩個(gè)方面原因:

          首先,在實(shí)際工作過(guò)程中,我們時(shí)不時(shí)需要驗(yàn)證或查看 array 相關(guān)的 API 或互操作。同時(shí),有時(shí)候在使用 sklearn,matplotlib,PyTorch,Tensorflow 等工具時(shí)也需要一些簡(jiǎn)單的數(shù)據(jù)進(jìn)行實(shí)驗(yàn)。

          所以,先學(xué)會(huì)如何快速拿到一個(gè) array 是有很多益處的。本節(jié)我們主要介紹以下幾種常用的創(chuàng)建方式:

          • 使用列表或元組

          • 使用 arange

          • 使用 linspace/logspace

          • 使用 ones/zeros

          • 使用 random

          • 從文件讀取

          其中,最常用的一般是 linspace/logspace 和 random,前者常常用在畫(huà)坐標(biāo)軸上,后者則用于生成「模擬數(shù)據(jù)」。舉例來(lái)說(shuō),當(dāng)我們需要畫(huà)一個(gè)函數(shù)的圖像時(shí),X 往往使用 linspace 生成,然后使用函數(shù)公式求得 Y,再 plot;當(dāng)我們需要構(gòu)造一些輸入(比如 X)或中間輸入(比如 Embedding、hidden state)時(shí),random 會(huì)異常方便。

          從 python 列表或元組創(chuàng)建

          ?? 重點(diǎn)掌握傳入 list 創(chuàng)建一個(gè) array 即可:np.array(list)

          ?? 需要注意的是:「數(shù)據(jù)類(lèi)型」。如果您足夠仔細(xì)的話,可以發(fā)現(xiàn)下面第二組代碼第 2 個(gè)數(shù)字是「小數(shù)」(注:Python 中 1. == 1.0),而 array 是要保證每個(gè)元素類(lèi)型相同的,所以會(huì)幫您把 array 轉(zhuǎn)為一個(gè) float 的類(lèi)型。

          #?一個(gè)?list
          np.array([1,2,3])
          array([1, 2, 3])
          #?二維(多維類(lèi)似)
          #?注意,有一個(gè)小數(shù)哦
          np.array([[1,?2.,?3],?[4,?5,?6]])
          array([[1., 2., 3.],
          [4., 5., 6.]])
          #?您也可以指定數(shù)據(jù)類(lèi)型
          np.array([1,?2,?3],?dtype=np.float16)
          array([1., 2., 3.], dtype=float16)
          #?如果指定了?dtype,輸入的值都會(huì)被轉(zhuǎn)為對(duì)應(yīng)的類(lèi)型,而且不會(huì)四舍五入
          lst?=?[
          ????[1,?2,?3],
          ????[4,?5,?6.8]
          ]
          np.array(lst,?dtype=np.int32)
          array([[1, 2, 3],
          [4, 5, 6]], dtype=int32)

          #?一個(gè)?tuple
          np.array((1.1,?2.2))
          array([1.1, 2.2])
          #?tuple,一般用?list?就好,不需要使用?tuple
          np.array([(1.1,?2.2,?3.3),?(4.4,?5.5,?6.6)])
          array([[1.1, 2.2, 3.3],
          [4.4, 5.5, 6.6]])
          #?轉(zhuǎn)換而不是上面的創(chuàng)建,其實(shí)是類(lèi)似的,無(wú)須過(guò)于糾結(jié)
          np.asarray((1,2,3))
          array([1, 2, 3])
          np.asarray(([1.,?2.,?3.],?(4.,?5.,?6.)))
          array([[1., 2., 3.],
          [4., 5., 6.]])

          使用 arange 生成

          ??

          range 是 Python 內(nèi)置的整數(shù)序列生成器,arange 是 numpy 的,效果類(lèi)似,會(huì)生成一維的向量。我們偶爾會(huì)需要使用這種方式來(lái)構(gòu)造 array,比如:

          • 需要?jiǎng)?chuàng)建一個(gè)連續(xù)一維向量作為輸入(比如編碼位置時(shí)可以使用)
          • 需要觀察篩選、抽樣的結(jié)果時(shí),有序的 array 一般更加容易觀察

          ?? 需要注意的是:在 reshape 時(shí),目標(biāo)的 shape 需要的元素?cái)?shù)量一定要和原始的元素?cái)?shù)量相等。

          np.arange(12).reshape(3,?4)
          array([[ 0,  1,  2,  3],
          [ 4, 5, 6, 7],
          [ 8, 9, 10, 11]])
          #?注意,是小數(shù)哦
          np.arange(12.0).reshape(4,?3)
          array([[ 0.,  1.,  2.],
          [ 3., 4., 5.],
          [ 6., 7., 8.],
          [ 9., 10., 11.]])
          np.arange(100,?124,?2).reshape(3,?2,?2
          array([[[100, 102],
          [104, 106]],

          [[108, 110],
          [112, 114]],

          [[116, 118],
          [120, 122]]])
          #?shape?size?相乘要和生成的元素?cái)?shù)量一致
          np.arange(100.,?124.,?2).reshape(2,3,4)

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

          ValueError Traceback (most recent call last)

          in
          ----> 1 np.arange(100., 124., 2).reshape(2,3,4)


          ValueError: cannot reshape array of size 12 into shape (2,3,4)

          使用 linspace/logspace 生成

          ???

          OK,這是我們遇到的第一個(gè)比較重要的 API,前者需要傳入 3 個(gè)參數(shù):開(kāi)頭,結(jié)尾,數(shù)量;后者需要額外傳入一個(gè) base,它默認(rèn)是 10。

          ?? 需要注意的是:第三個(gè)參數(shù)并不是步長(zhǎng)。

          np.linspace

          #?線性
          np.linspace(0,?9,?10).reshape(2,?5)
          array([[0., 1., 2., 3., 4.],
          [5., 6., 7., 8., 9.]])
          np.linspace(0,?9,?6).reshape(2,?3)
          array([[0. , 1.8, 3.6],
          [5.4, 7.2, 9. ]])

          #?指數(shù)?base?默認(rèn)為?10
          np.logspace(0,?9,?6,?base=np.e).reshape(2,?3)
          array([[1.00000000e+00, 6.04964746e+00, 3.65982344e+01],
          [2.21406416e+02, 1.33943076e+03, 8.10308393e+03]])
          #?_?表示上(最近)一個(gè)輸出
          #?logspace?結(jié)果?log?后就是上面?linspace?的結(jié)果
          np.log(_)
          array([[0. , 1.8, 3.6],
          [5.4, 7.2, 9. ]])

          下面我們更進(jìn)一步看一下:

          N?=?20
          x?=?np.arange(N)
          y1?=?np.linspace(0,?10,?N)?*?100
          y2?=?np.logspace(0,?10,?N,?base=2)

          plt.plot(x,?y2,?'*');
          plt.plot(x,?y1,?'o');

          #?檢查每個(gè)元素是否為?True
          #?base?的?指數(shù)為?linspace?得到的就是?logspace
          np.alltrue(2?**?np.linspace(0,?10,?N)??==?y2)
          True
          ?? 補(bǔ)充:關(guān)于 array 的條件判斷
          #?不能直接用?if?判斷?array?是否符合某個(gè)條件
          arr?=?np.array([1,?2,?3])
          cond1?=?arr?>?2
          cond1
          array([False, False,  True])
          if?cond1:
          ????print("這不行")

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

          ValueError Traceback (most recent call last)

          in
          ----> 1 if cond1:
          2 print("這不行")


          ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

          #?即便你全是?True?它也不行
          arr?=?np.array([1,?2,?3])
          cond2?=?arr?>?0
          cond2
          array([ True,  True,  True])
          if?cond2:
          ????print("這還不行")

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

          ValueError Traceback (most recent call last)

          in
          ----> 1 if cond2:
          2 print("這還不行")


          ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

          #?咱們只能用 any 或 all,這個(gè)很容易犯錯(cuò),請(qǐng)務(wù)必注意。
          if?cond1.any():
          ????print("只要有一個(gè)為T(mén)rue就可以,所以——我可以")
          只要有一個(gè)為T(mén)rue就可以,所以——我可以
          if?cond2.all():
          ????print("所有值為T(mén)rue才可以,我正好這樣")
          所有值為T(mén)rue才可以,我正好這樣

          使用 ones/zeros 創(chuàng)建

          ?

          創(chuàng)建全 1/0 array 的快捷方式。需要注意的是 np.zeros_likenp.ones_like,二者可以快速生成給定 array 一樣 shape 的 0 或 1 向量,這在需要 Mask 某些位置時(shí)可能會(huì)用到。

          ?? 需要注意的是:創(chuàng)建出來(lái)的 array 默認(rèn)是 float 類(lèi)型。

          np.ones(3)
          array([1., 1., 1.])
          np.ones((2,?3))
          array([[1., 1., 1.],
          [1., 1., 1.]])
          np.zeros((2,3,4))
          array([[[0., 0., 0., 0.],
          [0., 0., 0., 0.],
          [0., 0., 0., 0.]],

          [[0., 0., 0., 0.],
          [0., 0., 0., 0.],
          [0., 0., 0., 0.]]])
          #?像給定向量那樣的?0?向量(ones_like?是?1?向量)
          np.zeros_like(np.ones((2,3,3)))
          array([[[0., 0., 0.],
          [0., 0., 0.],
          [0., 0., 0.]],

          [[0., 0., 0.],
          [0., 0., 0.],
          [0., 0., 0.]]])

          使用 random 生成

          ?????

          如果要在這一節(jié)選一個(gè)最重要的 API,那一定是 random 無(wú)疑了,這里我們只介紹幾個(gè)比較常用的「生產(chǎn)」數(shù)據(jù)相關(guān)的 API。它們經(jīng)常用于隨機(jī)生成訓(xùn)練或測(cè)試數(shù)據(jù),神經(jīng)網(wǎng)路初始化等。

          ?? 需要注意的是:這里我們統(tǒng)一推薦使用新的 API 方式創(chuàng)建,即通過(guò) np.random.default_rng() 先生成 Generator,然后再在此基礎(chǔ)上生成各種分布的數(shù)據(jù)(記憶更加簡(jiǎn)便清晰)。不過(guò)我們依然會(huì)介紹就的 API 用法,因?yàn)楹芏啻a中使用的還是舊的,您可以混個(gè)眼熟。

          #?0-1?連續(xù)均勻分布
          np.random.rand(2,?3)
          array([[0.42508994, 0.5842191 , 0.09248675],
          [0.656858 , 0.88171822, 0.81744539]])
          #?單個(gè)數(shù)
          np.random.rand()
          0.29322641374172986
          #?0-1?連續(xù)均勻分布
          np.random.random((3,?2))
          array([[0.17586271, 0.5061715 ],
          [0.14594537, 0.34365713],
          [0.28714656, 0.40508807]])
          #?指定上下界的連續(xù)均勻分布
          np.random.uniform(-1,?1,?(2,?3))
          array([[ 0.66638982, -0.65327069, -0.21787878],
          [-0.63552782, 0.51072282, -0.14968825]])
          #?上面兩個(gè)的區(qū)別是?shape?的輸入方式不同,無(wú)傷大雅了
          #?不過(guò)從?1.17?版本后推薦這樣使用(以后大家可以用新的方法)
          #?rng?是個(gè)?Generator,可用于生成各種分布
          rng?=?np.random.default_rng(42)
          rng
          Generator(PCG64) at 0x111B5C5E0
          #?推薦的連續(xù)均勻分布用法
          rng.random((2,?3))
          array([[0.77395605, 0.43887844, 0.85859792],
          [0.69736803, 0.09417735, 0.97562235]])
          #?可以指定上下界,所以更加推薦這種用法
          rng.uniform(0,?1,?(2,?3))
          array([[0.47673156, 0.59702442, 0.63523558],
          [0.68631534, 0.77560864, 0.05803685]])
          #?隨機(jī)整數(shù)(離散均勻分布),不超過(guò)給定的值(10)
          np.random.randint(10,?size=2)
          array([6, 3])
          #?隨機(jī)整數(shù)(離散均勻分布),指定上下界和?shape
          np.random.randint(0,?10,?(2,?3))
          array([[8, 6, 1],
          [3, 8, 1]])
          #?上面推薦的方法,指定大小和上界
          rng.integers(10,?size=2)
          array([9, 7])
          #?上面推薦的方法,指定上下界
          rng.integers(0,?10,?(2,?3))
          array([[5, 9, 1],
          [8, 5, 7]])
          #?標(biāo)準(zhǔn)正態(tài)分布
          np.random.randn(2,?4)
          array([[-0.61241167, -0.55218849, -0.50470617, -1.35613877],
          [-1.34665975, -0.74064846, -2.5181665 , 0.66866357]])
          #?上面推薦的標(biāo)準(zhǔn)正態(tài)分布用法
          rng.standard_normal((2,?4))
          array([[ 0.09130331,  1.06124845, -0.79376776, -0.7004211 ],
          [ 0.71545457, 1.24926923, -1.22117522, 1.23336317]])
          #?高斯分布
          np.random.normal(0,?1,?(3,?5))
          array([[ 0.30037773, -0.17462372,  0.23898533,  1.23235421,  0.90514996],
          [ 0.90269753, -0.5679421 , 0.8769029 , 0.81726869, -0.59442623],
          [ 0.31453468, -0.18190156, -2.95932929, -0.07164822, -0.23622439]])
          #?上面推薦的高斯分布用法
          rng.normal(0,?1,?(3,?5))
          array([[ 2.20602146, -2.17590933,  0.80605092, -1.75363919,  0.08712213],
          [ 0.33164095, 0.33921626, 0.45251278, -0.03281331, -0.74066207],
          [-0.61835785, -0.56459129, 0.37724436, -0.81295739, 0.12044035]])

          總之,一般會(huì)用的就是2個(gè)分布:均勻分布和正態(tài)(高斯)分布。另外,size 可以指定 shape。

          rng?=?np.random.default_rng(42)
          #?離散均勻分布
          rng.integers(low=0,?high=10,?size=5)
          array([0, 7, 6, 4, 4])
          #?連續(xù)均勻分布
          rng.uniform(low=0,?high=10,?size=5)
          array([6.97368029, 0.94177348, 9.75622352, 7.61139702, 7.86064305])
          #?正態(tài)(高斯)分布
          rng.normal(loc=0.0,?scale=1.0,?size=(2,?3))
          array([[-0.01680116, -0.85304393,  0.87939797],
          [ 0.77779194, 0.0660307 , 1.12724121]])

          從文件讀取

          ?

          這小節(jié)主要用于加載實(shí)現(xiàn)存儲(chǔ)好的權(quán)重參數(shù)或預(yù)處理好的數(shù)據(jù)集,有時(shí)候會(huì)比較方便,比如訓(xùn)練好的模型參數(shù)加載到內(nèi)存里用來(lái)提供推理服務(wù),或者耗時(shí)很久的預(yù)處理數(shù)據(jù)直接存起來(lái),多次實(shí)驗(yàn)時(shí)不需要重新處理。

          ?? 需要注意的是:存儲(chǔ)時(shí)不需要寫(xiě)文件名后綴,會(huì)自動(dòng)添加。

          #?直接將給定矩陣存為?a.npy
          np.save('./data/a',?np.array([[1,?2,?3],?[4,?5,?6]]))
          #?可以將多個(gè)矩陣存在一起,名為?`b.npz`
          np.savez("./data/b",?a=np.arange(12).reshape(3,?4),?b=np.arange(12.).reshape(4,?3))
          #?和上一個(gè)一樣,只是壓縮了
          np.savez_compressed("./data/c",?a=np.arange(12).reshape(3,?4),?b=np.arange(12.).reshape(4,?3))
          #?加載單個(gè)?array
          np.load("data/a.npy")
          array([[1, 2, 3],
          [4, 5, 6]])
          #?加載多個(gè),可以像字典那樣取出對(duì)應(yīng)的?array
          arr?=?np.load("data/b.npz")
          arr["a"]
          array([[ 0,  1,  2,  3],
          [ 4, 5, 6, 7],
          [ 8, 9, 10, 11]])
          arr["b"]
          array([[ 0.,  1.,  2.],
          [ 3., 4., 5.],
          [ 6., 7., 8.],
          [ 9., 10., 11.]])
          #?后綴都一樣,你干脆當(dāng)它和上面的沒(méi)區(qū)別即可
          arr?=?np.load("data/c.npz")
          arr["b"]
          array([[ 0.,  1.,  2.],
          [ 3., 4., 5.],
          [ 6., 7., 8.],
          [ 9., 10., 11.]])

          統(tǒng)計(jì)和屬性

          本節(jié)我們從 array 的基本統(tǒng)計(jì)屬性入手,對(duì)剛剛創(chuàng)建的 array 進(jìn)一步的了解。主要包括以下幾個(gè)方面:

          • 尺寸相關(guān)
          • 最大、最小、中位、分位值
          • 平均、求和、標(biāo)準(zhǔn)差等

          都是描述性統(tǒng)計(jì)相關(guān)的指標(biāo),對(duì)于我們從整體了解一個(gè) array 很有幫助。其中,用到最多的是尺寸相關(guān)的「shape」,最大、最小值,平均值、求和等。

          本節(jié)的內(nèi)容非常簡(jiǎn)單,您只需要特別關(guān)注(記住)兩個(gè)重要的特性:

          • 按維度(指定 axis)求結(jié)果。一般0表示列1表示行,可以用「沿著行/列操作」這樣理解,不確定時(shí)可以拿個(gè)例子試一下。
          • 計(jì)算后保持維度(keepdims=True

          另外,為了便于操作,我們使用一個(gè)隨機(jī)生成的 array 作為操作對(duì)象;同時(shí),我們指定了 seed,這樣每次運(yùn)行,每個(gè)人看到的結(jié)果都是一樣的。一般我們?cè)谟?xùn)練模型時(shí),往往需要指定 seed,這樣才能在「同等條件」下進(jìn)行調(diào)參。

          #??先創(chuàng)建一個(gè)?Generator
          rng?=?np.random.default_rng(seed=42)
          #??再生成一個(gè)均勻分布
          arr?=?rng.uniform(0,?1,?(3,?4))
          arr
          array([[0.77395605, 0.43887844, 0.85859792, 0.69736803],
          [0.09417735, 0.97562235, 0.7611397 , 0.78606431],
          [0.12811363, 0.45038594, 0.37079802, 0.92676499]])

          尺寸相關(guān)

          ??

          這一小節(jié)主要包括:維度、形狀和數(shù)據(jù)量,其中形狀 shape 我們用到的最多。

          ?? 需要注意的是:size 不是 shape,ndim 表示有幾個(gè)維度。

          #?維度,array?是二維的(兩個(gè)維度)
          arr.ndim
          2

          np.shape

          #?形狀,返回一個(gè)?Tuple
          arr.shape
          (3, 4)
          #?數(shù)據(jù)量
          arr.size
          12

          最值分位

          ???

          這一小節(jié)主要包括:最大值、最小值、中位數(shù)、其他分位數(shù),其中『最大值和最小值』我們平時(shí)用到的最多。

          ?? 需要注意的是:分位數(shù)可以是 0-1 的任意小數(shù)(表示對(duì)應(yīng)分位),而且分位數(shù)并不一定在原始的 array 中。

          arr
          array([[0.77395605, 0.43887844, 0.85859792, 0.69736803],
          [0.09417735, 0.97562235, 0.7611397 , 0.78606431],
          [0.12811363, 0.45038594, 0.37079802, 0.92676499]])
          #?所有元素中最大的
          arr.max()
          0.9756223516367559

          np.max/min

          #?按維度(列)最大值
          arr.max(axis=0)
          array([0.77395605, 0.97562235, 0.85859792, 0.92676499])
          #?同理,按行
          arr.max(axis=1)
          array([0.85859792, 0.97562235, 0.92676499])
          #?是否保持原來(lái)的維度
          #?這個(gè)需要特別注意下,很多深度學(xué)習(xí)模型中都需要保持原有的維度進(jìn)行后續(xù)計(jì)算
          #?shape?是?(3,1),array?的?shape?是?(3,4),按行,同時(shí)保持了行的維度
          arr.min(axis=1,?keepdims=True)
          array([[0.43887844],
          [0.09417735],
          [0.12811363]])
          #?保持維度:(1,4),原始array是(3,4)
          arr.min(axis=0,?keepdims=True)
          array([[0.09417735, 0.43887844, 0.37079802, 0.69736803]])
          #?一維了
          arr.min(axis=0,?keepdims=False)
          array([0.09417735, 0.43887844, 0.37079802, 0.69736803])

          #?另一種用法,不過(guò)我們一般習(xí)慣使用上面的用法,其實(shí)兩者一回事
          np.amax(arr,?axis=0)
          array([0.77395605, 0.97562235, 0.85859792, 0.92676499])
          #?同?amax
          np.amin(arr,?axis=1)
          array([0.43887844, 0.09417735, 0.12811363])
          #?中位數(shù)
          #?其他用法和?max,min?是一樣的
          np.median(arr)
          0.7292538655248584
          #?分位數(shù),按列取1/4數(shù)
          np.quantile(arr,?q=0.25,?axis=0)
          array([0.11114549, 0.44463219, 0.56596886, 0.74171617])
          #?分位數(shù),按行取?3/4,同時(shí)保持維度
          np.quantile(arr,?q=0.75,?axis=1,?keepdims=True)
          array([[0.79511652],
          [0.83345382],
          [0.5694807 ]])
          #?分位數(shù),注意,分位數(shù)可以是?0-1?之間的任何數(shù)字(分位)
          #?如果是?1/2?分位,那正好是中位數(shù)
          np.quantile(arr,?q=1/2,?axis=1)
          array([0.73566204, 0.773602  , 0.41059198])

          平均求和標(biāo)準(zhǔn)差

          ???

          這一小節(jié)主要包括:平均值、累計(jì)求和、方差、標(biāo)準(zhǔn)差等進(jìn)一步的統(tǒng)計(jì)指標(biāo)。其中使用最多的是「平均值」。

          arr
          array([[0.77395605, 0.43887844, 0.85859792, 0.69736803],
          [0.09417735, 0.97562235, 0.7611397 , 0.78606431],
          [0.12811363, 0.45038594, 0.37079802, 0.92676499]])

          np.average

          #?平均值
          np.average(arr)
          0.6051555606435642
          #?按維度平均(列)
          np.average(arr,?axis=0)
          array([0.33208234, 0.62162891, 0.66351188, 0.80339911])

          #?另一個(gè)計(jì)算平均值的?API
          #?它與?average?的主要區(qū)別是,np.average?可以指定權(quán)重,即可以用于計(jì)算加權(quán)平均
          #?一般建議使用 average,忘掉 mean 吧!
          np.mean(arr,?axis=0)
          array([0.33208234, 0.62162891, 0.66351188, 0.80339911])

          np.sum

          #?求和,不多說(shuō)了,類(lèi)似
          np.sum(arr,?axis=1)
          array([2.76880044, 2.61700371, 1.87606258])
          np.sum(arr,?axis=1,?keepdims=True)
          array([[2.76880044],
          [2.61700371],
          [1.87606258]])

          #?按列累計(jì)求和
          np.cumsum(arr,?axis=0)
          array([[0.77395605, 0.43887844, 0.85859792, 0.69736803],
          [0.8681334 , 1.41450079, 1.61973762, 1.48343233],
          [0.99624703, 1.86488673, 1.99053565, 2.41019732]])
          #?按行累計(jì)求和
          np.cumsum(arr,?axis=1)
          array([[0.77395605, 1.21283449, 2.07143241, 2.76880044],
          [0.09417735, 1.0697997 , 1.8309394 , 2.61700371],
          [0.12811363, 0.57849957, 0.94929759, 1.87606258]])
          #?標(biāo)準(zhǔn)差,用法類(lèi)似
          np.std(arr)
          0.28783096517727075
          #?按列求標(biāo)準(zhǔn)差
          np.std(arr,?axis=0)
          array([0.3127589 , 0.25035525, 0.21076935, 0.09444968])
          #?方差
          np.var(arr,?axis=1)
          array([0.02464271, 0.1114405 , 0.0839356 ])
          文獻(xiàn)和資料
          • NumPy 教程 | 菜鳥(niǎo)教程
          • NumPy 中文

          一鍵三連,一起學(xué)習(xí)???

          瀏覽 79
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天堂一区在线观看 | 18禁欧美| 国产亲子乱露脸 | 国产裸身美女网站 | 91在线无码精品秘 入口九色十 |