Numpy中的廣播和數組運算

image

1、概述api

在Numpy中當數組進行運算時,若是兩個數組的形狀相同,那麼兩個數組相乘就是兩個數組的對應位相乘,這是要求維數相乘,而且各維度的長度相同,可是當運算中兩個數組的形狀不一樣使時,numpy將會自動觸發廣播機制,因此咱們要了解numpy的廣播機制,才能更好的進行數組的運算。數組

2、Numpy中的廣播ide

一、什麼是廣播函數

咱們都知道,Numpy中的基本運算(加、減、乘、除、求餘等等)都是元素級別的,可是這僅僅侷限於兩個數組的形狀相同的狀況下。spa

但是你們又會發現,若是讓一個數組加1的話,結果時整個數組的結果都會加1,這是什麼狀況呢?.net

image

image

image

image

image

image

其實這就是廣播機制:Numpy 能夠轉換這些形狀不一樣的數組,使它們都具備相同的大小,而後再對它們進行運算。下面是廣播示意圖:3d

image

術語廣播是指 NumPy 在算術運算期間處理不一樣形狀的數組的能力。對數組的算術運算一般在 相應的元素上進行。若是兩個陣列具備徹底相同的形狀,則這些操做被無縫執行。code

若是兩個數組的維數不相同,則元素到元素的操做是不可能的。然而,在 NumPy 中仍然能夠對形狀不類似的數組進行操做,由於它擁有廣播功能。較小的數組會廣播到較大數組的大小,以便使它們的形狀可兼容。排序

若是知足如下條件之一,那麼數組被稱爲可廣播的。索引

  • 數組擁有相同形狀。
  • 數組擁有相同的維數,且某一個或多個維度長度爲 1 。
  • 數組擁有極少的維度,能夠在其前面追加長度爲 1 的維度,使上述條件成立

廣播的規則:

  • 規則 1:若是兩個數組的維度數不相同,那麼小維度數組的形狀將會在最左邊補 1。
  • 規則 2:若是兩個數組的形狀在任何一個維度上都不匹配,那麼數組的形狀會沿着維度 爲 1 的維度擴展以匹配另一個數組的形狀。
  • 規則 3:若是兩個數組的形狀在任何一個維度上都不匹配而且沒有任何一個維度等於 1, 那麼會引起異常。

1.一、形狀相同的廣播

image

1.二、相同維度,但其中某一個或多個維度長度爲 1 的廣播:

image

1.三、較少的維度,默認在其前面追加長度爲 1 的維度:

image

1.四、若是是標量的話,會廣播整個數組上:

image

二、廣播示例

2.一、將數組賦值給a並查看數組的形狀

image

2.二、將數組賦值給b並查看數組的形狀

image

2.三、將數組a轉換爲4行1列

image

2.四、數組a+b,並查看形狀

image

image

明顯能夠看出,相加前 a 的形狀爲 (4, 1), b 的形狀爲 (3, ), a+b 的結果的形狀爲(4, 3)。計算時,變換結果與上圖相似,這裏來詳細介紹下:

image

2.五、如今嘗試模擬一個廣播的方式, 把a中的每一個元素拉長三倍

image

2.六、b 中的元素拉長4倍

image

2.七、aa+bb

image

2.八、a+b

image

這裏咱們就能看出,咱們將數組擴展到較大的維度再進行通用函數操做,和咱們直接進行廣播操做結果是同樣的。

3、Numpy中的運算

一、算術運算

Numpy中用於執行算術運算(如 add() ,subtract() ,multiply() 和 divide() )的輸入數組必須具 有相同的形狀或符合數組廣播規則。

經常使用數學運算函數:

數學運算函數

add(x1,x2 )

按元素添加參數,等效於 x1 + x2

subtract(x1,x2)

按元素方式減去參數,等效於x1 - x2

multiply(x1,x2)

逐元素乘法參數,等效於x1 * x2

divide(x1,x2)

逐元素除以參數,等效於x1 / x2

exp(x)

計算e的x次方。

exp2(x)

計算2的x次方。

power(x1,x2)

計算x1的x2次冪。

mod(x)

返回輸入數組中相應元素的除法餘數.

log(x)

天然對數,逐元素。

log2(x)

x的基礎2對數。

log10(x)

以元素爲單位返回輸入數組的基數10的對數。

expm1(x)

對數組中的全部元素計算exp(x) - 1

log1p(x)

返回一個加天然對數的輸入數組。

sqrt(x)

按元素方式返回數組的正平方根。

square(x)

返回輸入的元素平方。

sin(x)

三角正弦。

cos(x)

元素餘弦。

tan(x)

逐元素計算切線。

1.一、生成一個3行3列元素類型爲浮點型的數組和一個1行3列的數組

image

1.二、執行數組加法

image

1.三、執行數組減法

image

1.四、執行數組的乘法

image

1.五、執行數組的除法

image

1.六、numpy.reciprocal()

此函數返回參數逐元素的倒數,因爲 Python 處理整數除法的方式,對於絕對值大於 1 的整數 元素,結果始終爲 0,對於整數 0,則發出溢出警告。

image

1.七、進行指數運算

image

1.八、執行冪運算

image

1.九、numpy.mod()

此函數返回輸入數組中相應元素的除法餘數。函數 numpy.remainder() 也產生相同的結果。

image

1.十、對含有複數的數組進行執行的函數

image

  • numpy.real() 返回複數類型參數的實部。
  • numpy.imag() 返回複數類型參數的虛部。

image

  • numpy.conj() 返回經過改變虛部的符號而得到的共軛複數。

image

  • numpy.angle() 返回複數參數的角度。函數的參數是 degree 。若是爲 true,返回的角度以角度制來表示,不然爲以弧度制來表示。

image

1.十一、執行三角函數

image

  1. 補充
  • numpy.around()

這個函數返回四捨五入到所需精度的值。decimals 表示要舍入的小數位數。默認值爲 0。若是 爲負,整數將四捨五入到小數點左側的位置

image

同pyhon內置同樣,在進行舍入的時候須要注意二進制小數的精度問題

image

  • numpy.floor() 向下取整

此函數返回不大於輸入參數的最大整數。即標量 x 的下限是最大的整數 i ,使得 i <= x。注意 在 Python 中,向下取整老是從 0 舍入。

image

  • numpy.ceil()向上取整

本函數返回輸入值的上限,即,標量 x 的上限是最小的整數 i ,使得 i> = x。

image

二、字符串函數

如下函數用於對 dtype 爲 numpy.string 或 numpy.unicode 的數組執行向量化字符串操做。 它們基於 Python 內置庫中的標準字符串函數。

2.一、numpy.char.add()

函數執行按元素的字符串鏈接:

image

2.二、numpy.char.multiply()

這個函數執行多重鏈接:

image

2.三、numpy.char.center()

此函數返回所需寬度的數組,以便輸入字符串位於中心,並使用 fillchar 在左側和右側進行填充:

image

2.四、numpy.char.capitalize()

函數返回字符串的副本,其中第一個字母大寫:

image

2.五、numpy.char.title()

返回輸入字符串的按元素標題轉換版本,其中每一個單詞的首字母都大寫:

image

2.六、numpy.char.lower()

函數返回一個數組,其元素轉換爲小寫。它對每一個元素調用 str.lower:

image

2.七、numpy.char.upper()

函數返回一個數組,其元素轉換爲大寫。它對每一個元素調用 str.upper:

image

2.八、numpy.char.split()

此函數返回輸入字符串中的單詞列表。默認狀況下,空格用做分隔符。不然,指定的分隔符字符用於分割字符串:

image

2.九、numpy.char.splitlines()

函數返回數組中元素的單詞列表,以換行符分割:'n','r','rn' 都被當作換行符處理。

image

2.十、numpy.char.strip()

函數返回數組的副本,其中元素移除了開頭或結尾處的特定字符:

image

2.十一、numpy.char.join()

這個函數返回一個字符串,其中單個字符由特定的分隔符鏈接:

image

2.十二、numpy.char.replace()

這個函數返回字符串副本,其中全部字符序列的出現位置都被另外一個給定的字符序列取代:

image

三、統計函數

NumPy有不少有用的統計函數,用於從數組中給定的元素中查找最小,最大,百分標準差和方差等。

經常使用統計函數

numpy.amin()

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

numpy.amax()

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

numpy.ptp()

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

numpy.percentile()

返回特定軸的百分位數

numpy.median()

返回數組中值

numpy.mean()

返回數組的算術平均值

numpy.average()

返回數組的加權平均值

numpy.std()

返回數組的標準差

numpy.var()

返回數組的方差

3.一、numpy.amin() 和 numpy.amax()

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

image

3.三、numpy.ptp()

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

image

3.四、numpy.percentile()

百分位數是統計中使用的度量,表示小於這個值得觀察值佔某個百分比。函數numpy.percentile() 接受如下參數。

numpy.percentile(a, q, axis):

  • a 輸入數組
  • q 要計算的百分位數,在 0 ~ 100 之間
  • axis 沿着它計算百分位數的軸

image

3.五、numpy.median()

中值定義爲將數據樣本的上半部分與下半部分分開的值。

image

3.六、numpy.mean()

算術平均值是沿軸的元素的總和除以元素的數量。函數返回數組中元素的算術平均值。若是提供了軸,則沿其計算。

image

3.七、numpy.average()

加權平均值是由每一個份量乘以反映其重要性的因子獲得的平均值。函數根據在另外一個數組中給出的各自的權重計算數組中元素的加權平均值。該函數能夠接受一個軸參數。若是沒有指定軸,則數組會被展開。

考慮數組 [1,2,3,4] 和相應的權重 [4,3,2,1] ,經過將相應元素的乘積相加,並將和除以權重的和,來計算加權平均值。

加權平均值 = (14+23+32+41)/(4+3+2+1)

image

不指定權重時至關於mean函數

image

image

若是returned參數設爲true,則返回權重的和

image

3.八、numpy.std()

標準差是與均值的誤差的平方的平均值的平方根。標準差公式以下: std = sqrt(mean((x - x.mean())**2))

image

方差是誤差的平方的平均值,即mean((x - x.mean())** 2)。換句話說,標準差是方差的平方根。

image

四、排序、搜索和計數函數

4.一、numpy.sort()函數返回輸入數組的排序副本。

image

image

4.二、numpy.argsort()

函數對輸入數組沿給定軸執行間接排序,並使用指定排序類型返回數據的索引數組。這個索引 數組用於構造排序後的數組。

image

4.三、numpy.lexsort()

函數使用鍵序列執行間接排序。鍵能夠看做是電子表格中的一列。該函數返回一個索引數組,使用它能夠得到排序數據。注意,最後一個鍵剛好是 sort 的主鍵。

image

4.四、numpy.argmax() 和 numpy.argmin()

這兩個函數分別沿給定軸返回最大和最小元素的索引

image

4.五、numpy.nonzero()

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

image

4.六、numpy.where()

函數返回輸入數組中知足給定條件的元素的索引。

image

4.七、numpy.extract()

函數返回知足任何條件的元素。

image

五、轉置

Numpy 的轉置能夠按照你的須要對數組的軸進行轉換。

image

須要注意的是,轉置只能發生在二維及以上的維度的數組上生效,一維的數組只有一個維度是 不能夠轉置的。

image

六、惟一化和集合邏輯

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

6.1去重

  • 字符串去重

image

  • 整數去重

image

  • 布爾值去重

image

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

image

6.二、檢驗元素

image

6.三、求交集

image

6.四、求並集

image

6.五、求差集

image

相關文章
相關標籤/搜索