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) | ||
0 | a | 2 | a |
1 | b | 3 | b |
2 | c | 4 | c |
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为输出参数个数。
比如想计算一个分段函数的一列函数值:
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)