numpy的函式物件ufunc詳解

2021-08-25 11:36:35 字數 4991 閱讀 3877

ufunc物件是numpy的兩大基本物件之一,另乙個是array。ufunc是universal function object的縮寫。在python裡面,一切皆為物件,包括我們的函式,而numpy裡面的函式是ufunc物件的例項,如下所示:

type(np.add)#返回的是   即ufunc物件

既然是add,本身也是乙個ufunc類的物件,那我自然也可以通過 「  物件.方法或屬性  」去加以訪問了。那到底ufunc類中定義了哪些方法或者是的屬性呢,可以通過下面的方式加以檢視;

dir(np.ufunc)

返回的列表為:

['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'accumulate', 'at', 'identity', 'nargs', 'nin', 'nout', 'ntypes', 'outer', 'reduce', 'reduceat', 'signature', 'types']

特別的,對於二元操作符所對應的ufunc物件,如上面的add,可以使用下面的一些方法(注意:雖然numpy函式是ufunc的物件,但不是每乙個函式都是,也不是每乙個函式都可以使用上面的ufunc物件羅列出來的所有的屬性和方法)

1、reduce方法——np.add.reduce()

reduce(),沿著指定軸對陣列進行操作,相當於將相應的操作放到該軸元素之間。其實就是求某乙個維度上的和

a1=np.add.reduce([1,2,3])                  #1+2+3=6

a2=np.add.reduce([[1,2,3],[4,5,6]]) #[1+4,2+5,3+6]=[5,7,9]

a3=np.add.reduce([[1,2,3],[4,5,6]],axis=1) #[1+2+3,4+5+6]=[6,15]

a4=np.add.reduce([[1,2,3],[4,5,6]],axis=0) #[14,2+5,3+6]=[5,7,9]

預設為axis=0

2、accumulate()和reduce()類似,區別時是前者會保留中間結果:

b1=np.add.accumulate([1,2,3])                          #[1,1+2,1+2+3]=[1,3,6]

print(b1)

b2=np.add.accumulate([[1,2,3],[4,5,6],[7,8,9]],axis=0) #

print(b2)

b3=np.add.accumulate([[1,2,3],[4,5,6],[7,8,9]],axis=1)

print(b3)

b2的結果為 

[[1,2,3],

[1+4,2+5,3+6],

[1+4+7,2+5+8,3+6+9]]

所以最終的結果為:

[[ 1 2 3]

[ 5 7 9]

[12 15 18]]

b3的結果為:

[[ 1 ,1+2,1+2+3]

[ 4 ,4+5,4+5+6]

[7,7+8,7+8+9]]

所以最終的結果為:

[[ 1 3 6]

[ 4 9 15]

[ 7 15 24]]

3、reduceat()方法計算多紐reduce()的結果,通 過 indices引數指定一系列的起始和終止位置。它的計算有些特別,,計算的方法如下:

1、三角函式

sin(x)

cos(x)

tan(x)

sinh(x)

conh(x)

tanh(x)

arccos(x)

arctan(x)

arcsin(x)

arccosh(x)

arctanh(x)

arcsinh(x)

arctan2(x,y)

arctan2(x,y)返回arctan(x/y)

2、向量操作

dot(x,y)

inner(x,y)

cross(x,y)

vdot(x,y)

outer(x,y)

kron(x,y)

tensordot(x,y[,axis])

3、其他常見初等函式

exp(x)

log(x)

log10(x)

sqrt(x)

absolute(x)

conjugate(x)

negative(x)

ceil(x)

floor(x)

fabs(x)

hypot(x)

fmod(x)

maximum(x,y)

minimum(x,y)

hypot返回對應點(x,y)到原點的距離。

4、型別處理及判斷

iscomplexobj

iscomplex

isrealobj

isreal

imag

real

real_if_close

isscalar

isneginf

isposinf

isinf

isfinite

isnan

nan_to_num

common_type

typename

5、陣列修改形狀及變更

atleast_1d

atleast_2d

atleast_3d

expand_dims

hstack

vstack

dstack

column_stack

hsplit

vsplit

dsplit

split

squeeze

6、其他有用函式

fix

modamax

amin

ptpsum

cumsum

prod

cumprod

diff

angle

unwrap

sort_complex

trim_zeros

fliplr

flipud

rot90

diag

eyeselect

extract

insert

roots

poly

anyall

disp

unique

nansum

nanmax

nanargmax

nanargmin

nanmin

nan開頭的函式會進行相應的操作,但是忽略nan值。

7、常見的加減乘除四則運算運算

函式a + badd(a,b)

a - bsubtract(a,b)

a * bmultiply(a,b)

a / bdivide(a,b)

a ** bpower(a,b)

a % bremainder(a,b)

8、比較和邏輯運算運算

函式<

==equal

!=not_equal

>greater

>=greater_equal

<less

<=less_equal

logical_and

logical_or

logical_xor

logical_not

&bitwise_and

bitwise_or

^bitwise_xor

~invert

>>right_shift

<<left_shift

1 Numpy的通用函式 ufunc

元素級函式 一元函式 對陣列中的每個元素進行運算 陣列級函式 統計函式,像聚合函式 例如 求和 求平均 矩陣運算 隨機生成函式 常用一元通用函式 陣列級函式 函式名作用 例子結果 np.abs sum mean std var 計算絕對值 求和 求平均值 求標準差 方差 arr np.array 1...

numpy中的ufunc用法詳解

nin 輸入的個數 nout 輸出的個數 nargs the number of arguments.data attribute containing the number of arguments the ufunc takes,including optional ones.ntypes th...

科學計算庫(三)numpy之ufunc

abs fabs 取絕對值。fabs 更快的速度,但不能計算複數a bj的絕對值 sqrt 平方根 square 平方 exp x 計算自然常數e的x次方 log e為底 log10 log2 log1p 以e為底,1 arr為真數,求對數 如果是其他底數的log函式可以通過換底公式轉換。log換底...