Numpy 通用函數

frompyfunc的調用格式爲frompyfunc(func, nin, nout),其中func是計算單個元素的函數,nin是此函數的輸入參數的個數,nout是此函數的返回值的個數python

# 注:用frompyfunc獲得的函數計算出的數組元素的類型爲object,由於frompyfunc函數沒法保證Python函數返回的數據類型都徹底一致數組

1. 建立通用函數(步驟)
# 定義一個python函數函數

import numpy as np

def answer(a):
result = np.zeros_like(a)
result.flat = 42
return result

ufunc = np.frompyfunc(answer, 1, 1)
print (ufunc(np.arange(4)))
# [array(42) array(42) array(42) array(42)]

  

# 對二維數組進行操做對象

A = ufunc(np.arange(4).reshape(2,2))
print (A)
#[[array(42) array(42)]
# [array(42) array(42)]]

  

# 解析:定義了一個Python函數。其中,咱們使用zeros_like函數根據輸入參數的形狀初始化一個全爲0的數組,而後利用ndarray對象的flat屬性將全部的數組元素設置爲「終極答案」其值爲42blog

 

 

2. 通用函數的方法
通用函數有四個方法,不過只對輸入兩個參數、輸出一個參數的ufunc對象有效遞歸

# add 上調用通用函數的方法索引

(1). reduce方法 (對數組的reduce計算結果等價於對數組元素求和)class

import numpy as np
B = np.arange(9)
B1 = np.add.reduce(B)
print (B1)
# 36

 

(2). accumulate方法(能夠遞歸做用於輸入數組,將存儲運算的中間結果並返回)import

B2 = np.add.accumulate(B)
print (B2)
# [ 0 1 3 6 10 15 21 28 36]

  

(3). reduceat方法須要輸入一個數組以及一個索引值列表做爲參數object

B3 = np.add.reduceat(B,[0,5,2,7])
print (B3)
# [10 5 20 15]

# 解析:第一步用到索引值列表中的0和5,實際上就是對數組中索引值在0到5之間的元素進行reduce操做。

print (np.add.reduce(B[0:5]))

  

# 第二步用到索引值5和2。因爲2比5小,因此直接返回索引值爲5的元素

print (np.add.reduce(B[5]))

  

# 第三步用到索引值2和7。這一步是對索引值在2到7之間的數組元素進行reduce操做

print (np.add.reduce(B[2:7]))

  

# 第四步用到索引值7。這一步是對索引值從7開始直到數組末端的元素進行reduce操做

print (np.add.reduce(B[7:]))


(4). outer方法返回一個數組,它的秩(rank)等於兩個輸入數組的秩的和。它會做用於兩個輸入數組之間存在的全部元素對

B4 = np.add.outer(np.arange(3),B)
print (B4)
#[[ 0 1 2 ..., 6 7 8]
# [ 1 2 3 ..., 7 8 9]
# [ 2 3 4 ..., 8 9 10]]
相關文章
相關標籤/搜索