首页 > 代码库 > 数据分析:ufunc

数据分析:ufunc

universal function 可以对数组里的每一个元素进行操作,底层是C语言实现的,在对数组运算时表现卓越

1.1 初步上手

x = np.linspace(0,2*np.pi,10)

y = np.sin(x); y
Out[3]: 
array([  0.00000000e+00,   6.42787610e-01,   9.84807753e-01,
         8.66025404e-01,   3.42020143e-01,  -3.42020143e-01,
        -8.66025404e-01,  -9.84807753e-01,  -6.42787610e-01,
        -2.44929360e-16])

t = np.sin(x,x) # 函数的第二个参数用来存放输出的

t
Out[5]: 
array([  0.00000000e+00,   6.42787610e-01,   9.84807753e-01,
         8.66025404e-01,   3.42020143e-01,  -3.42020143e-01,
        -8.66025404e-01,  -9.84807753e-01,  -6.42787610e-01,
        -2.44929360e-16])

x
Out[6]: 
array([  0.00000000e+00,   6.42787610e-01,   9.84807753e-01,
         8.66025404e-01,   3.42020143e-01,  -3.42020143e-01,
        -8.66025404e-01,  -9.84807753e-01,  -6.42787610e-01,
        -2.44929360e-16])

id(t) == id(x) # 用id函数对比一下
Out[7]: True

1.2 小插曲 xrange

xrange()得到的是一个迭代器,可以通过enumerate(x)进行迭代,而range()获得的是一个列表

1.3 运行速度

math提供的函数对单个的运算速度很快,但对数组整体的运算效率一般,ufunc设计时是针对数组批量运算设计的,对数组整体运算速度很快,但单个运算一般

所以不推荐import *,这样可以math.sin也可以np.sin

y = x1 + x2: add(x1, x2 [, y])
y = x1 - x2: subtract(x1, x2 [, y])
y = x1 * x2: multiply (x1, x2 [, y])
y = x1 / x2: divide (x1, x2 [, y]), 如果两个数组的元素为整数,那么用整数除法
y = x1 / x2: true divide (x1, x2 [, y]), 总是返回精确的商
y = x1 // x2: floor divide (x1, x2 [, y]), 总是对返回值取整
y = -x: negative(x [,y])
y = x1**x2: power(x1, x2 [, y])
y = x1 % x2: remainder(x1, x2 [, y]), mod(x1, x2, [, y])

1.4 广播

教程上称之为广播,感觉有些别扭,称之为自动对齐好了

a = np.arange(0,60,10).reshape(-1,1);a
Out[25]: 
array([[ 0],
       [10],
       [20],
       [30],
       [40],
       [50]])

b = np.arange(0,5)

b.shape
Out[27]: (5,)

c = a+b;c
Out[28]: 
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24],
       [30, 31, 32, 33, 34],
       [40, 41, 42, 43, 44],
       [50, 51, 52, 53, 54]])

1.5 小插曲repeat

b = b.repeat(6, axis = 0) 0表示纵向,1表示横向

1.6 numpy.ogrid

这个应该在画三维图时会用到,先不急

 

数据分析:ufunc