【Python】range()、np.arange()、np.linspace()、np.logspace()的使用和区别

近期在调试深度学习相关的代码时,经常隔三差五遇到range()、np.arange()、np.linspace()、np.logspace()一系列的函数,每次遇到后,当时貌似理解了,但是过段时间又忘了,并且这几个函数看起来还长的差不多,虽然实现的功能看起来挺相似,但是他们之间还是有很多细微的区别。

毫不夸张的说,每次见到,每次好像都懂,但是呢,每次貌似又不确定,每次还是懵的、大脑还是混淆的。

为了一劳永逸的解决上述困惑,做个笔记,把这4个函数放到一起对比,以方便温故知新。

一、range([start:int],stop:int,[step:int])

  1. range()是Python自带的函数。
  2. 生成一个从start(包含)到stop(不包含),以step为步长的序列。返回一个list对象。
  3. start默认值为0,选填;stop是必填;step默认值为1,选填。
  4. start、stop、step均须为整型。
  5. 只能生成整型的序列。

程序验证:

当参数为非整型时,会报错:

二、np.arange([start=None], stop=None, [step=None], dtype=None)

  1. np.arange()属于numpy模块。
  2. 生成一个从start(包含)到stop(不包含),以step为步长的序列。返回一个ndarray对象。
  3. 可以生成整型、浮点型序列,毫无压力。
  4. 当step参数为非整数时(如step=0.1),结果往往不一致。对于这些情况,最好使用“linspace()”函数。

参数含义:

  • start:数值型,可选填。包含此值。默认为0。
  • stop:数值型,必填。不包含此值。除非step的值不是整数,浮点舍入会影响“out”的长度。
  • step:数值型,可选填。默认为1,如果步长有指定,则start必须给出来。
  • dtype:数据类型。输出的array数据类型。如果未指定dtype,则输出的array类型由其它的输入参数决定。
  • start、stop、step若任一个为浮点型,那么都会生成一个浮点型序列。

程序验证:

三、np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  • 指定在 start到stop的均分数值(等差数列)。
  • start:不可缺省。
  • stop:有时包含,有时不包含,根据endpoint来选择,默认包含。
  • num:指定均分的数量,默认为50。
  • endpoint:布尔值,可选,默认为True。包含stop就True,不包含就False
  • retstep:布尔值,可选,默认为False。如果为True,返回值和步长
  • dtype:输出数据类型,可选。如果不指定,则根据前面参数的数据类型

程序验证:

四、np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

返回一个等比数列。

参数:

  • start:float类型,基底base的start次幂作为左边界
  • stop:float类型,基底base的stop次幂作为右边界
  • num:指定等比数值的数量,默认为50
  • endpoint:布尔值,可选,默认为True。包含stop就True,不包含就False
  • base:float类型,选填,基底
  • dtype:输出数据类型。

返回值:ndarray类型

logspace()函数,等价于如下代码:

y = np.linspace(start, stop, num=num, endpoint=endpoint)
power(base, y).astype(dtype)

程序验证:

五、list 与 numpy.ndarray区别

上述四个函数,range()返回值为list类型,其余为ndarray类型,看着差不多,这两种类型有什么区别呢?

python中的二维数组,主要有 list(列表) 和 numpy.ndarray(多维数组) 两种, 两种的区别主要体现在numpy.ndarray 支持更多的索引方式,下面通过代码来看一下两种数据类型索引方式的区别:

对a和b的元素进行访问:

两者区别:

可以看到numpy.ndarray 比list的访问方式更灵活,因此在处理数据时,可以通过np.array()方便的将list转化为numpy.ndarray, 当然处理完后还可以通过tolist()将ndarray再转回列表,从而方便删除或添加元素。

参考:

  1. http://www.mamicode.com/info-detail-2449535.html
  2. https://blog.csdn.net/ui_shero/article/details/78881067
  3. https://www.jianshu.com/p/f8e6a0a6399f
  • 31
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值