- 4.1 The NumPy ndarray 多维数组对象
- 4.2 Universal Functions 通用函数
- 4.3 Array-Oriented Programming with Arrays 数组导向编程
- 5.1 Introduction to pandas Data Structures pandas 的数据结构
- 5.2 Essential Functionality 主要功能
- 5.3 Summarizing and Computing Descriptive Statistics 汇总和描述性统计
- 7.1 Handling Missing Data 处理缺失数据
- 7.2 Data Transformation 数据变换
- 7.3 String Manipulation 字符串处理
- 11.1 Date and Time Data Types and Tools 日期和时间数据类型及其工具
- 11.2 Time Series Basics 时间序列基础
- 11.3 Date Ranges, Frequencies, and Shifting 日期范围,频度,和位移
- 12.1 Categorical Data 类别数据
- 14.1 USA.gov Data from Bitly USA.gov 数据集
- 14.2 MovieLens 1M Dataset MovieLens 1M 数据集
- 14.3 US Baby Names 1880–2010 1880年至2010年美国婴儿姓名
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.2 Universal Functions 通用函数
4.2 Universal Functions: Fast Element-Wise Array Functions(通用函数:快速点对点数组函数)
universal function, 或 ufunc, 是用来在 ndarray 中实现 element-wise 操作的。
可以认为这个 ufunc 可以把一些简单的函数做快速的向量化封装,输入是一个以上的标量,输出也是一个以上的标量。
很多 ufuncs 都是点对点的变换,像 sqrt 或 exp:
import numpy as np arr = np.arange(10) arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.sqrt(arr)
array([ 0. , 1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
np.exp(arr)
array([ 1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01, 5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03, 2.98095799e+03, 8.10308393e+03])
这些函数叫做一元通用函数(unary ufuncs)。其他一些函数,比如 add 或 maximum,需要两个数组(binary ufuncs),并返回一个数组作为结果:
x = np.random.randn(8) y = np.random.randn(8) x
array([ 0.18373557, -1.82728347, -0.11149882, -1.34286776, -1.09016986, 1.63308 , 1.05205535, -0.32746706])
y
array([-0.42410809, 1.89603273, -1.13649816, -0.98559379, -0.16827718, 0.52828569, 1.57543351, 1.50045399])
np.maximum(x, y)
array([ 0.18373557, 1.89603273, -0.11149882, -0.98559379, -0.16827718, 1.63308 , 1.57543351, 1.50045399])
这里 mamimum 点对点的比较 x 和 y 中的元素。
尽管不常见,但 ufunc 也能返回多个数组。例如 modf,这是一个向量版的 divmod(python 内建函数),modf 会返回小数部分和整数部分:
本函数是实现 a 除以 b,然后返回商与余数的元组。如果两个参数 a,b 都是整数,那么会采用整数除法,结果相当于(a//b, a % b)。如果 a 或 b 是浮点数,相当于(math.floor(a/b), a%b)。
arr = np.random.randn(7) * 5 arr
array([ 1.51538382, -0.75054846, 0.02863286, 8.74026861, -3.44529124, -9.18401768, -0.68469611])
remainder, whole_part = np.modf(arr) remainder
array([ 0.51538382, -0.75054846, 0.02863286, 0.74026861, -0.44529124, -0.18401768, -0.68469611])
whole_part
array([ 1., -0., 0., 8., -3., -9., -0.])
ufunc 能接受一个可选参数作为输出,这样可以直接更改原有的数组:
arr
array([ 1.51538382, -0.75054846, 0.02863286, 8.74026861, -3.44529124, -9.18401768, -0.68469611])
np.sqrt(arr) # 没有改变原有的 arr
array([ 1.23100927, nan, 0.16921248, 2.95639453, nan, nan, nan])
np.sqrt(arr, arr) # 改变了原有的 arr
array([ 1.23100927, nan, 0.16921248, 2.95639453, nan, nan, nan])
arr
array([ 1.23100927, nan, 0.16921248, 2.95639453, nan, nan, nan])
一些一元通用函数:
一些二元通用函数:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论