numpy高级应用—ufunc

1.内置ufunc方法

在这里插入图片描述
内置的ufunc方法的目的主要是免去了编写循环的代码。使用的形式为 "np.operation_name.ufunc"

reduce方法

对相邻的两个数字进行聚合操作,
在这里插入图片描述

import numpy as np

np.multiply.reduce([2, 3, 5])	# 返回结果30

X = np.arange(8).reshape(2, 2, 2)
# X的形式为
	[[[0, 1],
	  [2, 3]],
	 [[4, 5],
	  [6, 7]]]
np.add.reduce(X, 0)		
# 返回结果
	[[4, 6],
	 [8, 10]]
np.add.reduce(X)	# 默认 axis=0,结果与上方代码相同
	  
np.add.reduce(X, 1)		
# 返回结果
	[[2, 4],
	 [10, 12]]

np.add.reduce(X, 2)		
# 返回结果
	[[1, 5],
	 [9, 13]]

outer方法

在这里插入图片描述
两个一维数组最终生成一个二维数组,(5,)和(5,)生成(5, 5)的数组。

arr = np.arange(3).repeat([1, 2, 2])	# 得到 [0, 1, 1, 2, 2]

np.multiply.outer(arr, np.arange(5))
# 得到
	[[0, 0, 0, 0, 0],
	 [0, 1, 2, 3, 4],
	 [0, 1, 2, 3, 4],
	 [0, 2, 4, 6, 8],
	 [0, 2, 4, 6, 8]]

(3,4)的数组和(5,)的数组生成(3,4,5)的数组。
在这里插入图片描述

accumulate方法

在这里插入图片描述
在这里插入图片描述
对于一维数组而言,

np.add.accumulate([2, 3, 5])	# 返回 [2, 5, 10]
np.multiply.accumulate([2, 3, 5])	# 返回 [2, 6, 30] 

对于二维数组而言,首先创建一个对角矩阵,

I = np.eye(2)
# [[1, 0],
#  [0, 1]]
np.add.accumulate(I, 0)   
# [[1, 0],
#  [1, 1]]

np.add.accumulate(I, 1)
# [[1, 1],
#  [0, 1]]	

accumulate方法和reduce方法的差异就像是cumsum和sum的区别,accumulate方法会产生与原数组相同的记录累积分布的数组。

reduceat方法

相当于pandas的groupby方法,都是用于聚合,但是不如pandas的groupby方法灵活,
在这里插入图片描述

2.自定义ufunc方法

numpy中有两个工具可以将自定义方法像ufunc那样使用。这两个方法在运行时候会比其他numpy方法慢很多,因为其他方法基于C语言,而这两个方法调用传入的方法时使用的是Python的解释器。

frompyfunc方法

该方法接受一个Python函数和两个分别表示输入输出参数数量的整数,
在这里插入图片描述

vectorize方法

该方法没有frompyfunc方法那么强大,但是在类型判断上更胜一筹。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值