Numpy 通用函數


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

# 注:用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屬性將所有的數組元素設置為“終極答案”其值為42

 

 

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

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

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

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

 

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

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

  

(3). reduceat方法需要輸入一個數組以及一個索引值列表作為參數

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]]

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM