numpy的神奇廣播函式

2021-07-11 20:05:53 字數 1055 閱讀 2274

pandas的元素級操作是對每個元素進行相同的操作,比如格式轉換,判斷是否為空等。

df = dataframe(np.arange(12).reshape(3,4))

# 判斷為空

df.isnull()

# 對每個元素轉字串

# 執行數學操作

對a的每個元素,根據b的相同位置的元素進行相應的操作。

# pandas官網例子

df = pd.dataframe()

df_mask = pd.dataframe()

# 根據df_mask的值,將df對應位置的值替換成-1000

df.where(df_mask,-1000)

# 將# 兩個df的加減乘除也是根據對應元素的操作

df+df

df*df

兩個df除了加減乘除外的操作怎麼辦呢?比如a中的元素是否包含在b中對應元素呢?或者將a、b的對應元素轉成字串然後進行其他操作呢。

這裡就用到了numpy的ufunc函式,可以自定義廣播函式,然後對每個元素進行相同的操作。

frompyfunc,把python裡的函式(可以是自寫的)轉化成ufunc,用法是frompyfunc(func, nin, nout),其中func是需要轉換的函式,nin是函式的輸入引數的個數,nout是此函式的返回值的個數。

注意:frompyfunc函式無法保證返回的資料型別都完全一致,因此返回乙個中間型別object,需要再次obj.astype(np.float64)之類將其元素型別強制調齊。

# 將兩個元素轉成字串後拼接起來

defadd_elements

(x,y):

return str(x)+"+"+str(y)

# 將自定義函式轉成廣播函式

add_them=np.frompyfunc(add_elements,2,1)

# 兩個dataframe的操作

add_them(df,df*2)

numpy的廣播規則

首先說一下numpy的廣播規則 1 如果兩個數的維度數不同,那麼小維度陣列的形狀將會在最左邊補1。2 如果兩個陣列的形狀在任何乙個維度都不匹配,那麼陣列的形狀會沿著維度為1的維度擴充套件以匹配另外乙個陣列的形狀。3 如果兩個陣列的形狀在任何乙個維度上都不匹配並且沒有任何乙個維度等於1,那麼會引發異常...

numpy廣播機制

1.廣播法則是為了更好的處理不同維數矩陣之間的運算 1 廣播第一法則是,如果所有的輸入陣列維度不都相同,乙個 1 將被重複地新增在維度較小的陣列上直至所有的陣列擁有一樣的維度。2 廣播第二法則確定長度為1的陣列沿著特殊的方向表現地好像它有沿著那個方向最大形狀的大小。對陣列來說,沿著那個維度的陣列元素...

numpy中的廣播機制

numpy兩個陣列的相加 相減以及相乘都是對應元素之間的操作。import numpy as np x np.array 2,2,3 1,2,3 y np.array 1,1,3 2,2,4 print x y numpy當中的陣列相乘是對應元素的乘積,與線性代數當中的矩陣相乘不一樣 輸入結果如下 ...