日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Numpy中的廣播和數(shù)組運(yùn)算

 CDA數(shù)據(jù)分析師 2019-04-08

Numpy中的廣播和數(shù)組運(yùn)算

一、概述

在Numpy中當(dāng)數(shù)組進(jìn)行運(yùn)算時(shí),如果兩個(gè)數(shù)組的形狀相同,那么兩個(gè)數(shù)組相乘就是兩個(gè)數(shù)組的對(duì)應(yīng)位相乘,這是要求維數(shù)相乘,并且各維度的長(zhǎng)度相同,但是當(dāng)運(yùn)算中兩個(gè)數(shù)組的形狀不同使時(shí),numpy將會(huì)自動(dòng)觸發(fā)廣播機(jī)制,所以我們要了解numpy的廣播機(jī)制,才能更好的進(jìn)行數(shù)組的運(yùn)算。

二、Numpy中的廣播

1、什么是廣播

我們都知道,Numpy中的基本運(yùn)算(加、減、乘、除、求余等等)都是元素級(jí)別的,但是這僅僅局限于兩個(gè)數(shù)組的形狀相同的情況下。

可是大家又會(huì)發(fā)現(xiàn),如果讓一個(gè)數(shù)組加1的話,結(jié)果時(shí)整個(gè)數(shù)組的結(jié)果都會(huì)加1,這是什么情況呢?

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

其實(shí)這就是廣播機(jī)制:Numpy 可以轉(zhuǎn)換這些形狀不同的數(shù)組,使它們都具有相同的大小,然后再對(duì)它們進(jìn)行運(yùn)算。下面是廣播示意圖:

Numpy中的廣播和數(shù)組運(yùn)算

術(shù)語(yǔ)廣播是指 NumPy 在算術(shù)運(yùn)算期間處理不同形狀的數(shù)組的能力。對(duì)數(shù)組的算術(shù)運(yùn)算通常在 相應(yīng)的元素上進(jìn)行。如果兩個(gè)陣列具有完全相同的形狀,則這些操作被無(wú)縫執(zhí)行。

如果兩個(gè)數(shù)組的維數(shù)不相同,則元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以對(duì)形狀不相似的數(shù)組進(jìn)行操作,因?yàn)樗鼡碛袕V播功能。較小的數(shù)組會(huì)廣播到較大數(shù)組的大小,以便使它們的形狀可兼容。

如果滿足以下條件之一,那么數(shù)組被稱為可廣播的。

  • 數(shù)組擁有相同形狀。數(shù)組擁有相同的維數(shù),且某一個(gè)或多個(gè)維度長(zhǎng)度為 1 。數(shù)組擁有極少的維度,可以在其前面追加長(zhǎng)度為 1 的維度,使上述條件成立

廣播的規(guī)則:

  • 規(guī)則 1:如果兩個(gè)數(shù)組的維度數(shù)不相同,那么小維度數(shù)組的形狀將會(huì)在最左邊補(bǔ) 1。規(guī)則 2:如果兩個(gè)數(shù)組的形狀在任何一個(gè)維度上都不匹配,那么數(shù)組的形狀會(huì)沿著維度 為 1 的維度擴(kuò)展以匹配另外一個(gè)數(shù)組的形狀。規(guī)則 3:如果兩個(gè)數(shù)組的形狀在任何一個(gè)維度上都不匹配并且沒有任何一個(gè)維度等于 1, 那么會(huì)引發(fā)異常。

1.1、形狀相同的廣播

Numpy中的廣播和數(shù)組運(yùn)算

1.2、相同維度,但其中某一個(gè)或多個(gè)維度長(zhǎng)度為 1 的廣播:

Numpy中的廣播和數(shù)組運(yùn)算

1.3、較少的維度,默認(rèn)在其前面追加長(zhǎng)度為 1 的維度:

Numpy中的廣播和數(shù)組運(yùn)算

1.4、如果是標(biāo)量的話,會(huì)廣播整個(gè)數(shù)組上:

Numpy中的廣播和數(shù)組運(yùn)算

2、廣播示例

2.1、將數(shù)組賦值給a并查看數(shù)組的形狀

Numpy中的廣播和數(shù)組運(yùn)算

2.2、將數(shù)組賦值給b并查看數(shù)組的形狀

Numpy中的廣播和數(shù)組運(yùn)算

2.3、將數(shù)組a轉(zhuǎn)換為4行1列

Numpy中的廣播和數(shù)組運(yùn)算

2.4、數(shù)組a+b,并查看形狀

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

明顯可以看出,相加前 a 的形狀為 (4, 1), b 的形狀為 (3, ), a+b 的結(jié)果的形狀為(4, 3)。計(jì)算時(shí),變換結(jié)果與上圖類似,這里來詳細(xì)介紹下:

Numpy中的廣播和數(shù)組運(yùn)算

2.5、現(xiàn)在嘗試模擬一個(gè)廣播的方式, 把a(bǔ)中的每個(gè)元素拉長(zhǎng)三倍

Numpy中的廣播和數(shù)組運(yùn)算

2.6、b 中的元素拉長(zhǎng)4倍

Numpy中的廣播和數(shù)組運(yùn)算

2.7、aa+bb

Numpy中的廣播和數(shù)組運(yùn)算

2.8、a+b

Numpy中的廣播和數(shù)組運(yùn)算

這里我們就能看出,我們將數(shù)組擴(kuò)展到較大的維度再進(jìn)行通用函數(shù)操作,和我們直接進(jìn)行廣播操作結(jié)果是一樣的。

三、Numpy中的運(yùn)算

1、算術(shù)運(yùn)算

Numpy中用于執(zhí)行算術(shù)運(yùn)算(如 add() ,subtract() ,multiply() 和 divide() )的輸入數(shù)組必須具 有相同的形狀或符合數(shù)組廣播規(guī)則。

常用數(shù)學(xué)運(yùn)算函數(shù):

數(shù)學(xué)運(yùn)算函數(shù)

add(x1,x2 )

按元素添加參數(shù),等效于 x1 + x2

subtract(x1,x2)

按元素方式減去參數(shù),等效于x1 - x2

multiply(x1,x2)

逐元素乘法參數(shù),等效于x1 * x2

divide(x1,x2)

逐元素除以參數(shù),等效于x1 / x2

exp(x)

計(jì)算e的x次方。

exp2(x)

計(jì)算2的x次方。

power(x1,x2)

計(jì)算x1的x2次冪。

mod(x)

返回輸入數(shù)組中相應(yīng)元素的除法余數(shù).

log(x)

自然對(duì)數(shù),逐元素。

log2(x)

x的基礎(chǔ)2對(duì)數(shù)。

log10(x)

以元素為單位返回輸入數(shù)組的基數(shù)10的對(duì)數(shù)。

expm1(x)

對(duì)數(shù)組中的所有元素計(jì)算exp(x) - 1

log1p(x)

返回一個(gè)加自然對(duì)數(shù)的輸入數(shù)組。

sqrt(x)

按元素方式返回?cái)?shù)組的正平方根。

square(x)

返回輸入的元素平方。

sin(x)

三角正弦。

cos(x)

元素余弦。

tan(x)

逐元素計(jì)算切線。

1.1、生成一個(gè)3行3列元素類型為浮點(diǎn)型的數(shù)組和一個(gè)1行3列的數(shù)組

Numpy中的廣播和數(shù)組運(yùn)算

1.2、執(zhí)行數(shù)組加法

Numpy中的廣播和數(shù)組運(yùn)算

1.3、執(zhí)行數(shù)組減法

Numpy中的廣播和數(shù)組運(yùn)算

1.4、執(zhí)行數(shù)組的乘法

Numpy中的廣播和數(shù)組運(yùn)算

1.5、執(zhí)行數(shù)組的除法

Numpy中的廣播和數(shù)組運(yùn)算

1.6、numpy.reciprocal()

此函數(shù)返回參數(shù)逐元素的倒數(shù),由于 Python 處理整數(shù)除法的方式,對(duì)于絕對(duì)值大于 1 的整數(shù) 元素,結(jié)果始終為 0,對(duì)于整數(shù) 0,則發(fā)出溢出警告。

Numpy中的廣播和數(shù)組運(yùn)算

1.7、進(jìn)行指數(shù)運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

1.8、執(zhí)行冪運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

1.9、numpy.mod()

此函數(shù)返回輸入數(shù)組中相應(yīng)元素的除法余數(shù)。函數(shù) numpy.remainder() 也產(chǎn)生相同的結(jié)果。

Numpy中的廣播和數(shù)組運(yùn)算

1.10、對(duì)含有復(fù)數(shù)的數(shù)組進(jìn)行執(zhí)行的函數(shù)

Numpy中的廣播和數(shù)組運(yùn)算

  • numpy.real() 返回復(fù)數(shù)類型參數(shù)的實(shí)部。numpy.imag() 返回復(fù)數(shù)類型參數(shù)的虛部。

Numpy中的廣播和數(shù)組運(yùn)算

  • numpy.conj() 返回通過改變虛部的符號(hào)而獲得的共軛復(fù)數(shù)。

Numpy中的廣播和數(shù)組運(yùn)算

  • numpy.angle() 返回復(fù)數(shù)參數(shù)的角度。函數(shù)的參數(shù)是 degree 。如果為 true,返回的角度以角度制來表示,否則為以弧度制來表示。

Numpy中的廣播和數(shù)組運(yùn)算

1.11、執(zhí)行三角函數(shù)

Numpy中的廣播和數(shù)組運(yùn)算

  • 補(bǔ)充numpy.around()

這個(gè)函數(shù)返回四舍五入到所需精度的值。decimals 表示要舍入的小數(shù)位數(shù)。默認(rèn)值為 0。如果 為負(fù),整數(shù)將四舍五入到小數(shù)點(diǎn)左側(cè)的位置

Numpy中的廣播和數(shù)組運(yùn)算

同pyhon內(nèi)置一樣,在進(jìn)行舍入的時(shí)候需要注意二進(jìn)制小數(shù)的精度問題

Numpy中的廣播和數(shù)組運(yùn)算

  • numpy.floor() 向下取整

此函數(shù)返回不大于輸入?yún)?shù)的最大整數(shù)。即標(biāo)量 x 的下限是最大的整數(shù) i ,使得 i <= x。注意 在 Python 中,向下取整總是從 0 舍入。

Numpy中的廣播和數(shù)組運(yùn)算

  • numpy.ceil()向上取整

本函數(shù)返回輸入值的上限,即,標(biāo)量 x 的上限是最小的整數(shù) i ,使得 i> = x。

Numpy中的廣播和數(shù)組運(yùn)算

2、字符串函數(shù)

以下函數(shù)用于對(duì) dtype 為 numpy.string 或 numpy.unicode 的數(shù)組執(zhí)行向量化字符串操作。 它們基于 Python 內(nèi)置庫(kù)中的標(biāo)準(zhǔn)字符串函數(shù)。

2.1、numpy.char.add()

函數(shù)執(zhí)行按元素的字符串連接:

Numpy中的廣播和數(shù)組運(yùn)算

2.2、numpy.char.multiply()

這個(gè)函數(shù)執(zhí)行多重連接:

Numpy中的廣播和數(shù)組運(yùn)算

2.3、numpy.char.center()

此函數(shù)返回所需寬度的數(shù)組,以便輸入字符串位于中心,并使用 fillchar 在左側(cè)和右側(cè)進(jìn)行填充:

Numpy中的廣播和數(shù)組運(yùn)算

2.4、numpy.char.capitalize()

函數(shù)返回字符串的副本,其中第一個(gè)字母大寫:

Numpy中的廣播和數(shù)組運(yùn)算

2.5、numpy.char.title()

返回輸入字符串的按元素標(biāo)題轉(zhuǎn)換版本,其中每個(gè)單詞的首字母都大寫:

Numpy中的廣播和數(shù)組運(yùn)算

2.6、numpy.char.lower()

函數(shù)返回一個(gè)數(shù)組,其元素轉(zhuǎn)換為小寫。它對(duì)每個(gè)元素調(diào)用 str.lower:

Numpy中的廣播和數(shù)組運(yùn)算

2.7、numpy.char.upper()

函數(shù)返回一個(gè)數(shù)組,其元素轉(zhuǎn)換為大寫。它對(duì)每個(gè)元素調(diào)用 str.upper:

Numpy中的廣播和數(shù)組運(yùn)算

2.8、numpy.char.split()

此函數(shù)返回輸入字符串中的單詞列表。默認(rèn)情況下,空格用作分隔符。否則,指定的分隔符字符用于分割字符串:

Numpy中的廣播和數(shù)組運(yùn)算

2.9、numpy.char.splitlines()

函數(shù)返回?cái)?shù)組中元素的單詞列表,以換行符分割:' ',' ',' ' 都被當(dāng)做換行符處理。

Numpy中的廣播和數(shù)組運(yùn)算

2.10、numpy.char.strip()

函數(shù)返回?cái)?shù)組的副本,其中元素移除了開頭或結(jié)尾處的特定字符:

Numpy中的廣播和數(shù)組運(yùn)算

2.11、numpy.char.join()

這個(gè)函數(shù)返回一個(gè)字符串,其中單個(gè)字符由特定的分隔符連接:

Numpy中的廣播和數(shù)組運(yùn)算

2.12、numpy.char.replace()

這個(gè)函數(shù)返回字符串副本,其中所有字符序列的出現(xiàn)位置都被另一個(gè)給定的字符序列取代:

Numpy中的廣播和數(shù)組運(yùn)算

3、統(tǒng)計(jì)函數(shù)

NumPy有很多有用的統(tǒng)計(jì)函數(shù),用于從數(shù)組中給定的元素中查找最小,最大,百分標(biāo)準(zhǔn)差和方差等。

常用統(tǒng)計(jì)函數(shù)

numpy.amin()

從給定數(shù)組中的元素沿指定軸返回最小值

numpy.amax()

從給定數(shù)組中的元素沿指定軸返回最大值

numpy.ptp()

返回沿軸的值的極差(最大值 - 最小值)

numpy.percentile()

返回特定軸的百分位數(shù)

numpy.median()

返回?cái)?shù)組中值

numpy.mean()

返回?cái)?shù)組的算術(shù)平均值

numpy.average()

返回?cái)?shù)組的加權(quán)平均值

numpy.std()

返回?cái)?shù)組的標(biāo)準(zhǔn)差

numpy.var()

返回?cái)?shù)組的方差

3.1、numpy.amin() 和 numpy.amax()

這些函數(shù)從給定數(shù)組中的元素沿指定軸返回最小值和最大值。

Numpy中的廣播和數(shù)組運(yùn)算

3.3、numpy.ptp()

本函數(shù)返回沿軸的值的極差(最大值 - 最小值)。

Numpy中的廣播和數(shù)組運(yùn)算

3.4、numpy.percentile()

百分位數(shù)是統(tǒng)計(jì)中使用的度量,表示小于這個(gè)值得觀察值占某個(gè)百分比。函數(shù)numpy.percentile() 接受以下參數(shù)。

numpy.percentile(a, q, axis):

  • a 輸入數(shù)組q 要計(jì)算的百分位數(shù),在 0 ~ 100 之間axis 沿著它計(jì)算百分位數(shù)的軸

Numpy中的廣播和數(shù)組運(yùn)算

3.5、numpy.median()

中值定義為將數(shù)據(jù)樣本的上半部分與下半部分分開的值。

Numpy中的廣播和數(shù)組運(yùn)算

3.6、numpy.mean()

算術(shù)平均值是沿軸的元素的總和除以元素的數(shù)量。函數(shù)返回?cái)?shù)組中元素的算術(shù)平均值。如果提供了軸,則沿其計(jì)算。

Numpy中的廣播和數(shù)組運(yùn)算

3.7、numpy.average()

加權(quán)平均值是由每個(gè)分量乘以反映其重要性的因子得到的平均值。函數(shù)根據(jù)在另一個(gè)數(shù)組中給出的各自的權(quán)重計(jì)算數(shù)組中元素的加權(quán)平均值。該函數(shù)可以接受一個(gè)軸參數(shù)。如果沒有指定軸,則數(shù)組會(huì)被展開。

考慮數(shù)組 [1,2,3,4] 和相應(yīng)的權(quán)重 [4,3,2,1] ,通過將相應(yīng)元素的乘積相加,并將和除以權(quán)重的和,來計(jì)算加權(quán)平均值。

加權(quán)平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)

Numpy中的廣播和數(shù)組運(yùn)算

不指定權(quán)重時(shí)相當(dāng)于mean函數(shù)

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

如果returned參數(shù)設(shè)為true,則返回權(quán)重的和

Numpy中的廣播和數(shù)組運(yùn)算

3.8、numpy.std()

標(biāo)準(zhǔn)差是與均值的偏差的平方的平均值的平方根。標(biāo)準(zhǔn)差公式如下: std = sqrt(mean((x - x.mean())**2))

Numpy中的廣播和數(shù)組運(yùn)算

方差是偏差的平方的平均值,即mean((x - x.mean())** 2)。換句話說,標(biāo)準(zhǔn)差是方差的平方根。

Numpy中的廣播和數(shù)組運(yùn)算

4、排序、搜索和計(jì)數(shù)函數(shù)

4.1、numpy.sort()函數(shù)返回輸入數(shù)組的排序副本。

Numpy中的廣播和數(shù)組運(yùn)算

Numpy中的廣播和數(shù)組運(yùn)算

4.2、numpy.argsort()

函數(shù)對(duì)輸入數(shù)組沿給定軸執(zhí)行間接排序,并使用指定排序類型返回?cái)?shù)據(jù)的索引數(shù)組。這個(gè)索引 數(shù)組用于構(gòu)造排序后的數(shù)組。

Numpy中的廣播和數(shù)組運(yùn)算

4.3、numpy.lexsort()

函數(shù)使用鍵序列執(zhí)行間接排序。鍵可以看作是電子表格中的一列。該函數(shù)返回一個(gè)索引數(shù)組,使用它可以獲得排序數(shù)據(jù)。注意,最后一個(gè)鍵恰好是 sort 的主鍵。

Numpy中的廣播和數(shù)組運(yùn)算

4.4、numpy.argmax() 和 numpy.argmin()

這兩個(gè)函數(shù)分別沿給定軸返回最大和最小元素的索引

Numpy中的廣播和數(shù)組運(yùn)算

4.5、numpy.nonzero()

函數(shù)返回輸入數(shù)組中非零元素的索引。

Numpy中的廣播和數(shù)組運(yùn)算

4.6、numpy.where()

函數(shù)返回輸入數(shù)組中滿足給定條件的元素的索引。

Numpy中的廣播和數(shù)組運(yùn)算

4.7、numpy.extract()

函數(shù)返回滿足任何條件的元素。

Numpy中的廣播和數(shù)組運(yùn)算

5、轉(zhuǎn)置

Numpy 的轉(zhuǎn)置可以按照你的需要對(duì)數(shù)組的軸進(jìn)行轉(zhuǎn)換。

Numpy中的廣播和數(shù)組運(yùn)算

需要注意的是,轉(zhuǎn)置只能發(fā)生在二維及以上的維度的數(shù)組上生效,一維的數(shù)組只有一個(gè)維度是 不可以轉(zhuǎn)置的。

Numpy中的廣播和數(shù)組運(yùn)算

6、唯一化和集合邏輯

  • np.unique() 去重函數(shù)np.in1d() 驗(yàn)證元素是否在給定序列中np.intersect1d() 求交集np.union1d() 求并集np.setdiff1d() 求差集

6.1去重

  • 字符串去重

Numpy中的廣播和數(shù)組運(yùn)算

  • 整數(shù)去重

Numpy中的廣播和數(shù)組運(yùn)算

  • 布爾值去重

Numpy中的廣播和數(shù)組運(yùn)算

  • 布爾值的any()和all()函數(shù)

Numpy中的廣播和數(shù)組運(yùn)算

6.2、檢驗(yàn)元素

Numpy中的廣播和數(shù)組運(yùn)算

6.3、求交集

Numpy中的廣播和數(shù)組運(yùn)算

6.4、求并集

Numpy中的廣播和數(shù)組運(yùn)算

6.5、求差集

Numpy中的廣播和數(shù)組運(yùn)算

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多