一、概述 在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,這是什么情況呢? 其實(shí)這就是廣播機(jī)制:Numpy 可以轉(zhuǎn)換這些形狀不同的數(shù)組,使它們都具有相同的大小,然后再對(duì)它們進(jìn)行運(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ù)組被稱為可廣播的。
廣播的規(guī)則:
1.1、形狀相同的廣播 1.2、相同維度,但其中某一個(gè)或多個(gè)維度長(zhǎng)度為 1 的廣播: 1.3、較少的維度,默認(rèn)在其前面追加長(zhǎng)度為 1 的維度: 1.4、如果是標(biāo)量的話,會(huì)廣播整個(gè)數(shù)組上: 2、廣播示例 2.1、將數(shù)組賦值給a并查看數(shù)組的形狀 2.2、將數(shù)組賦值給b并查看數(shù)組的形狀 2.3、將數(shù)組a轉(zhuǎn)換為4行1列 2.4、數(shù)組a+b,并查看形狀 明顯可以看出,相加前 a 的形狀為 (4, 1), b 的形狀為 (3, ), a+b 的結(jié)果的形狀為(4, 3)。計(jì)算時(shí),變換結(jié)果與上圖類似,這里來詳細(xì)介紹下: 2.5、現(xiàn)在嘗試模擬一個(gè)廣播的方式, 把a(bǔ)中的每個(gè)元素拉長(zhǎng)三倍 2.6、b 中的元素拉長(zhǎng)4倍 2.7、aa+bb 2.8、a+b 這里我們就能看出,我們將數(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ù)組 1.2、執(zhí)行數(shù)組加法 1.3、執(zhí)行數(shù)組減法 1.4、執(zhí)行數(shù)組的乘法 1.5、執(zhí)行數(shù)組的除法 1.6、numpy.reciprocal() 此函數(shù)返回參數(shù)逐元素的倒數(shù),由于 Python 處理整數(shù)除法的方式,對(duì)于絕對(duì)值大于 1 的整數(shù) 元素,結(jié)果始終為 0,對(duì)于整數(shù) 0,則發(fā)出溢出警告。 1.7、進(jìn)行指數(shù)運(yùn)算 1.8、執(zhí)行冪運(yùn)算 1.9、numpy.mod() 此函數(shù)返回輸入數(shù)組中相應(yīng)元素的除法余數(shù)。函數(shù) numpy.remainder() 也產(chǎn)生相同的結(jié)果。 1.10、對(duì)含有復(fù)數(shù)的數(shù)組進(jìn)行執(zhí)行的函數(shù)
1.11、執(zhí)行三角函數(shù)
這個(gè)函數(shù)返回四舍五入到所需精度的值。decimals 表示要舍入的小數(shù)位數(shù)。默認(rèn)值為 0。如果 為負(fù),整數(shù)將四舍五入到小數(shù)點(diǎn)左側(cè)的位置 同pyhon內(nèi)置一樣,在進(jìn)行舍入的時(shí)候需要注意二進(jìn)制小數(shù)的精度問題
此函數(shù)返回不大于輸入?yún)?shù)的最大整數(shù)。即標(biāo)量 x 的下限是最大的整數(shù) i ,使得 i <= x。注意 在 Python 中,向下取整總是從 0 舍入。
本函數(shù)返回輸入值的上限,即,標(biāo)量 x 的上限是最小的整數(shù) i ,使得 i> = x。 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í)行按元素的字符串連接: 2.2、numpy.char.multiply() 這個(gè)函數(shù)執(zhí)行多重連接: 2.3、numpy.char.center() 此函數(shù)返回所需寬度的數(shù)組,以便輸入字符串位于中心,并使用 fillchar 在左側(cè)和右側(cè)進(jìn)行填充: 2.4、numpy.char.capitalize() 函數(shù)返回字符串的副本,其中第一個(gè)字母大寫: 2.5、numpy.char.title() 返回輸入字符串的按元素標(biāo)題轉(zhuǎn)換版本,其中每個(gè)單詞的首字母都大寫: 2.6、numpy.char.lower() 函數(shù)返回一個(gè)數(shù)組,其元素轉(zhuǎn)換為小寫。它對(duì)每個(gè)元素調(diào)用 str.lower: 2.7、numpy.char.upper() 函數(shù)返回一個(gè)數(shù)組,其元素轉(zhuǎn)換為大寫。它對(duì)每個(gè)元素調(diào)用 str.upper: 2.8、numpy.char.split() 此函數(shù)返回輸入字符串中的單詞列表。默認(rèn)情況下,空格用作分隔符。否則,指定的分隔符字符用于分割字符串: 2.9、numpy.char.splitlines() 函數(shù)返回?cái)?shù)組中元素的單詞列表,以換行符分割:' ',' ',' ' 都被當(dāng)做換行符處理。 2.10、numpy.char.strip() 函數(shù)返回?cái)?shù)組的副本,其中元素移除了開頭或結(jié)尾處的特定字符: 2.11、numpy.char.join() 這個(gè)函數(shù)返回一個(gè)字符串,其中單個(gè)字符由特定的分隔符連接: 2.12、numpy.char.replace() 這個(gè)函數(shù)返回字符串副本,其中所有字符序列的出現(xiàn)位置都被另一個(gè)給定的字符序列取代: 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ù)組中的元素沿指定軸返回最小值和最大值。 3.3、numpy.ptp() 本函數(shù)返回沿軸的值的極差(最大值 - 最小值)。 3.4、numpy.percentile() 百分位數(shù)是統(tǒng)計(jì)中使用的度量,表示小于這個(gè)值得觀察值占某個(gè)百分比。函數(shù)numpy.percentile() 接受以下參數(shù)。 numpy.percentile(a, q, axis):
3.5、numpy.median() 中值定義為將數(shù)據(jù)樣本的上半部分與下半部分分開的值。 3.6、numpy.mean() 算術(shù)平均值是沿軸的元素的總和除以元素的數(shù)量。函數(shù)返回?cái)?shù)組中元素的算術(shù)平均值。如果提供了軸,則沿其計(jì)算。 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) 不指定權(quán)重時(shí)相當(dāng)于mean函數(shù) 如果returned參數(shù)設(shè)為true,則返回權(quán)重的和 3.8、numpy.std() 標(biāo)準(zhǔn)差是與均值的偏差的平方的平均值的平方根。標(biāo)準(zhǔn)差公式如下: std = sqrt(mean((x - x.mean())**2)) 方差是偏差的平方的平均值,即mean((x - x.mean())** 2)。換句話說,標(biāo)準(zhǔn)差是方差的平方根。 4、排序、搜索和計(jì)數(shù)函數(shù) 4.1、numpy.sort()函數(shù)返回輸入數(shù)組的排序副本。 4.2、numpy.argsort() 函數(shù)對(duì)輸入數(shù)組沿給定軸執(zhí)行間接排序,并使用指定排序類型返回?cái)?shù)據(jù)的索引數(shù)組。這個(gè)索引 數(shù)組用于構(gòu)造排序后的數(shù)組。 4.3、numpy.lexsort() 函數(shù)使用鍵序列執(zhí)行間接排序。鍵可以看作是電子表格中的一列。該函數(shù)返回一個(gè)索引數(shù)組,使用它可以獲得排序數(shù)據(jù)。注意,最后一個(gè)鍵恰好是 sort 的主鍵。 4.4、numpy.argmax() 和 numpy.argmin() 這兩個(gè)函數(shù)分別沿給定軸返回最大和最小元素的索引 4.5、numpy.nonzero() 函數(shù)返回輸入數(shù)組中非零元素的索引。 4.6、numpy.where() 函數(shù)返回輸入數(shù)組中滿足給定條件的元素的索引。 4.7、numpy.extract() 函數(shù)返回滿足任何條件的元素。 5、轉(zhuǎn)置 Numpy 的轉(zhuǎn)置可以按照你的需要對(duì)數(shù)組的軸進(jìn)行轉(zhuǎn)換。 需要注意的是,轉(zhuǎn)置只能發(fā)生在二維及以上的維度的數(shù)組上生效,一維的數(shù)組只有一個(gè)維度是 不可以轉(zhuǎn)置的。 6、唯一化和集合邏輯
6.1去重
6.2、檢驗(yàn)元素 6.3、求交集 6.4、求并集 6.5、求差集 |
|