Python3中range , arange 和linspace 的异同

python3中range , arange 和linspace 的相同点

这三个函数的相同点是:

都可以生成指定数量步长相同的一组数据,而且生成的对象都可以被迭代!

如果只是需要一组指定范围内步长相同用来被迭代的数据,这三个函数用哪个都可以,重头戏在于这三个函数的不同点.

python3中range , arange 和linspace 的不同(三个函数的详解)

函数从属不同,从而在函数调用方法上也不同

range函数是Python的原生函数,调用的时候直接用函数名称调用就可以,如range(10);

arange和linspace是numpy库里的函数,调用之前要先导入numpy库import numpy as np,如果是以这种方法导入的numpy库,在调用库里函数的时候,函数名前边需要加库的名字,如np.arange(10)

函数的参数设置和函数调用结果的不同

首先,来看一下range函数的参数要求和调用结果

Init signature: range(self, /, *args, **kwargs)
Docstring:     
range(stop) -> range object
range(start, stop[, step]) -> range object

常用的参数设置就是我截取的这一块儿,可以看到range函数的参数有两种设置方式:
第一种:只设置终止值,这种情况下,生成的数值默认是从0开始到设置的终止值结束,步长默认是1;
第二种:指定起始值和终止值,生成的数值序列在设置的两者范围之内,步长是可选参数,如果不设置步长,步长默认是1

range函数的特点,生成的数值序列包含起始值不包含终止值,且不能通过参数改变这个特点

看一个栗子:
list(range(10))
返回结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
这里用list函数进行数据类型的转换,就涉及到range函数的调用结果了

range函数生成的是一个range object,可以直接进行迭代但不能被人直接读取内部元素信息

所以,如要看下range函数调用结果,需要用其他数据类型转换函数进行转换.
range(10)
返回结果:range(0, 10)
这个结果的含义就是,生成了一个起始值是0,终止值是10,步长是1的range对象,然后这个range对象里边是不包含10的,数学表达一下的话应该是这样[0,10).

想要查看range对象中的元素,除了用list函数之外,像tuple函数和set函数也都是可以的.
和list函数返回的结果类似,就是数据外边的方括号变成了圆括号或者花括号

tuple(range(1,10,2)) #这里用了第二种参数设置方式,设置了起始值\终止值和步长
返回结果:(1, 3, 5, 7, 9) #用元组函数对range对象进行转化查看range对象中的元素

set(range(1,10,2)) #用集合函数转化也是可以的
返回结果:{1, 3, 5, 7, 9} #返回的数据类型就是集合,也可以查看range函数内部的元素

range函数的步长设置不能是浮点数,只能是整数

range(1,3,0.1)
返回结果:

TypeError                                 Traceback (most recent call last)
 in 
----> 1 range(1,3,0.1)

TypeError: 'float' object cannot be interpreted as an integer

其次,来看一下arange函数

arange函数和range函数的相同之处

arange函数的参数设置和range函数的参数设置类似:
第一种方式是只设置终止值,起始值默认是0,步长默认是1;
第二种方式是设置起始值和终止值,步长作为可选参数,如果不设置,默认是1.
而且,arange函数生成的结果也是包含起始值不包含终止值的

arange函数和range函数的不同之处
arange函数生成的结果是array,不需要用其他序列函数进行转换就可以看到内部的元素
np.arange(10)
返回结果 : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

而且,arange函数的步长参数可以是浮点数
np.arange(0,1,0.1)
返回结果:array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

由于生成的结果是array,具有向量的性质,可以直接进行运算
np.arange(0,1,0.1)+np.arange(10)
返回结果:array([0. , 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9])

range函数生成的结果是range对象,不可以进行这样的直接的运算操作:
range(10)+range(10)
返回结果

TypeError                                 Traceback (most recent call last)
 in 
----> 1 range(10)+range(10)

TypeError: unsupported operand type(s) for +: 'range' and 'range'

如果想要是实现对应元素的数学运算,需要用到循环.

最后,来看一下linspace函数
linspace函数的参数比较多:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
和range函数与arange函数不同,linspace函数在进行调用的时候,至少要传入两个参数,即起始值和终止值,而且生成的结果默认既包含起始值也包含终止值,也可以通过参数进行设置是否要包含终止值,该函数根据起始值和终止值以及要生成数值的数量自动计算步长,不需要人为输入步长,可以通过retstep参数设置,是否显示步长,默认不显示

栗子:
np.linspace(1,10) #从1到10,默认生成50个数,包含10
返回结果:

        1.91836735,  2.10204082,  2.28571429,  2.46938776,  2.65306122,
        2.83673469,  3.02040816,  3.20408163,  3.3877551 ,  3.57142857,
        3.75510204,  3.93877551,  4.12244898,  4.30612245,  4.48979592,
        4.67346939,  4.85714286,  5.04081633,  5.2244898 ,  5.40816327,
        5.59183673,  5.7755102 ,  5.95918367,  6.14285714,  6.32653061,
        6.51020408,  6.69387755,  6.87755102,  7.06122449,  7.24489796,
        7.42857143,  7.6122449 ,  7.79591837,  7.97959184,  8.16326531,
        8.34693878,  8.53061224,  8.71428571,  8.89795918,  9.08163265,
        9.26530612,  9.44897959,  9.63265306,  9.81632653, 10.        ])

np.linspace(1,10,num = 10) #设置生成数值的个数
返回结果 : array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])

np.linspace(1,10,num = 9 ,endpoint=False) #设置生成结果不包含终止值
返回结果 : array([1., 2., 3., 4., 5., 6., 7., 8., 9.])

np.linspace(1,10,num = 10 ,retstep = True) #retstep参数设置显示步长
返回结果 : (array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0)
最后的1.0即为步长

linspac函数生成的也是array对象,和arange函数结果一样,也是具有向量属性的!

你可能感兴趣的:(Python基础,numpy)