#!/usr/bin/env python # coding: utf-8 # # 4.2 Universal Functions: Fast Element-Wise Array Functions(通用函数:快速点对点数组函数) # # universal function, 或 ufunc, 是用来在ndarray中实现element-wise操作的。 # # 可以认为这个ufunc可以把一些简单的函数做快速的向量化封装,输入是一个以上的标量,输出也是一个以上的标量。 # # 很多ufuncs都是点对点的变换,像sqrt或exp: # In[3]: import numpy as np arr = np.arange(10) arr # In[4]: np.sqrt(arr) # In[5]: np.exp(arr) # 这些函数叫做一元通用函数(unary ufuncs)。其他一些函数,比如add或maximum,需要两个数组(binary ufuncs),并返回一个数组作为结果: # In[7]: x = np.random.randn(8) y = np.random.randn(8) x # In[8]: y # In[9]: np.maximum(x, y) # 这里mamimum点对点的比较x和y中的元素。 # # 尽管不常见,但ufunc也能返回多个数组。例如modf,这是一个向量版的divmod(python内建函数),modf会返回小数部分和整数部分: # # >本函数是实现a除以b,然后返回商与余数的元组。如果两个参数a,b都是整数,那么会采用整数除法,结果相当于(a//b, a % b)。如果a或b是浮点数,相当于(math.floor(a/b), a%b)。 # # In[10]: arr = np.random.randn(7) * 5 arr # In[11]: remainder, whole_part = np.modf(arr) remainder # In[12]: whole_part # ufunc能接受一个可选参数作为输出,这样可以直接更改原有的数组: # In[13]: arr # In[14]: np.sqrt(arr) # 没有改变原有的arr # In[15]: np.sqrt(arr, arr) # 改变了原有的arr # In[16]: arr # 一些一元通用函数: # # ![](../MarkdownPhotos/chp04/屏幕快照 2017-10-25 下午1.19.41.png) # # # # 一些二元通用函数: # ![](../MarkdownPhotos/chp04/屏幕快照 2017-10-25 下午1.21.08.png) # # ![](../MarkdownPhotos/chp04/屏幕快照 2017-10-25 下午1.21.42.png) # #