标签:type range 技术 point out mesh 表达式 numpy 行数据
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。
sqrt 和 exp为一元(unary)ufunc,add或maxinum接受2个数组,因此也叫二元(binary) ufunc, 并返回一个结果数组
import numpy as np arr = np.arange(10) np.sqrt(arr) Out[110]: array([ 0. , 1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]) np.exp(arr) Out[111]: 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])
x = np.random.randn(8) y = np.random.randn(8) x,y Out[112]: (array([-1.68554158, -0.62988644, -0.65300182, -0.9357815 , -0.58973656, -1.13627121, -0.25952295, -0.7144267 ]), array([ 0.45716238, 0.49681059, 0.61541084, -2.41726508, -0.40145024, -0.74636291, -0.31083867, 0.58094538])) np.maximum(x, y) #元素级最大值 Out[113]: array([ 0.45716238, 0.49681059, 0.61541084, -0.9357815 , -0.40145024, -0.74636291, -0.25952295, 0.58094538])
但有些ufunc可以返回多个数组,但不常见。例如modf, 它是python内置函数divmod的矢量化版本,用于浮点数组的小数和整数部分。
arr = np.random.randn(7) * 5 arr Out[116]: array([-8.13879901, 0.5628696 , 0.50146831, -0.94937254, -4.13344095, 6.55263049, 9.20516911]) np.modf(arr) Out[117]: (array([-0.13879901, 0.5628696 , 0.50146831, -0.94937254, -0.13344095, 0.55263049, 0.20516911]), array([-8., 0., 0., -0., -4., 6., 9.]))
一元ufunc
注意,log1p,为log(1+X), 底数为1+X ;
ceil 为大于等于该值的最小整数;
floor 即小于等于该值的最大整数
rint 将各元素值四舍五入到最接近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立数组的形式返回
logical_not 计算各元素的not x的真值,相当于-arr
二元ufunc
常用的应该为add 加、subtract减 、multiply 乘、divide除、 power , maximum(fmax), minimum(fmin), mod
1 、利用数组进行数据处理
numpy 数组可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环)。用数组表达式代替循环的做法,通过被称为矢量化。一般来说,矢量化数组运算要比造价的纯python方式快上一两个数量级(甚至更多),尤其是各种数值计算。
points = np.arange(-5, 5, 0.01) #1000个间隔相等的点 xs, ys = np.meshgrid(points, points) ys Out[120]: array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ], [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99], [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98], ..., [ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97], [ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98], [ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])
对该函数的求值运算,把这两个数组当做两个浮点数那样编写表达式即可:
import matplotlib.pyplot as plt z = np.sqrt(xs ** 2 + ys ** 2) z Out[123]: array([[ 7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985, 7.06400028], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], ..., [ 7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603, 7.04279774], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568]])
plt.imshow(z, cmap = plt.cm.gray); plt.colorbar() plt.title("image plot of $\sqrt{x^2 + y^2}$ for a grid of values") Out[124]: <matplotlib.text.Text at 0xa4987b8> ?
2、将条件逻辑表述为数组运算
np.where函数的应用
标签:type range 技术 point out mesh 表达式 numpy 行数据
原文地址:http://www.cnblogs.com/yizhenfeng/p/7475989.html