Python的基础学习1.2 ufunc的操作

0.for循环中几个常用函数

0.1 enumerate

由于下述内容会用到函数enumerate()这个函数,所以先提前说明一下。enumerate--列举枚举,主要用于循环语句中同时遍历一个数组的索引和对象。

x=['a','b','c'];
#从数组x中遍历索引i和对象t
for i,t in enumerate(x):
    print (i,t)

#第二个参数表示索引从2开始编号
for i,t in enumerate(x,2):
    print (i,t)

 输出为:

enumerate(x)enumerate(x,2)
0a2a
1b3b
2c4c

0.2 range

Python3 中没有xrange。此处range就是一个生成器,用法与numpy库中的arrange相似:range(始,终,间隔),始和间隔都可以省略。range(3)表示逐次产生0,1,2。

for i in range(3):
    print (i)

输出为:0 1 2

1.ufunc中的基本函数

numpy库下的简单函数操作:np.sin(x,out=y) 对数组x中的每个元素进行操作,并输出为y,第二个参数为输出参数可以省略

numpy下的很多ufunc函数都是用C语言实现,因此大量计算时速度快。但是单个计算时速度可能比Python,因为要进行语言之间的转化(C和P)。

math库中的sin函数只能计算一个数,不能计算逐个计算数组中元素。

%timeit计算单元时间,%%timeit计算整个程序时间

import numpy as np
import math as m

#比较单次时间
x=5
%timeit m.sin(x)
%timeit np.sin(x)


def sin_m(x):
    for i,t in enumerate(x):
        x[i]=m.sin(t)

#比较整个循环时间
x1=[i*0.001 in range(100000000)]
%timeit sin_m(x1)
%timeit np.sin(x1)

1.1 运算

其中常见的加、减、乘、除、幂次、求余可以用一般的运算符代替,也可以用np._中的ufunc函数操作。

import numpy as np
x1=np.arange(0,4)
x2=np.arange(0,4)
x3=x1+x2
x3=np.add(x1,x2)

1.2 判断

两数组比较:依次比较各个元素

布尔运算:或or、且and、非not,要用logical_使用

import numpy as np
x1=np.arange(0,4)
x2=np.arange(5,9)
x1<x2
np.less(x1,x2)

np.logical_not(x1<x2)

np.logical_and(x1<x2 ,x1>x2)

输出为:array([True,True,True,True]),array([False,False,False,False]),array([False,False,False,False])

 

 

 

2.自定义ufun函数

先定义一个函数,再用np.frompyfunc(func,nin,nout)将该函数转化成ufunc函数,因为ufunc函数可以对数组进行操作。其中func为所定义的函数名,nin为输入参数个数,nout为输出参数个数。

比如想计算一个分段函数的一列函数值:

f(x)=\left\{\begin{matrix} 2x &x<0 \\ x^{2} &0\leq x<2 \\ x+2&2\leq x \end{matrix}\right.

import numpy as np
import matplotlib.pyplot as plt
def piece_value(x):
    if x<0: r=2*x
    elif x>=2: r=2+x
    else: r=x**2
    return r

f=np.frompyfunc(piece_value,1,1)
x1=np.arange(-10,10,1)
y1=f(x1)
plt.plot(x1,y1)
图1:分段函数

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值