【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
### 回答1: `np.linspace()`是NumPy库中的一个函数,用于在指定的间隔内返回等间隔的数字序列。 该函数的语法为: ```python numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0) ``` 其中,参数的含义如下: - `start`:序列的起始值。 - `stop`:序列的结束值。 - `num`:生成的等间隔样例数,默认为50。 - `endpoint`:序列中是否包含`stop`值,如果为`True`,则包含;如果为`False`,则不包含。默认为`True`。 - `retstep`:如果为`True`,则返回样例之间的间距;如果为`False`,则不返回。默认为`False`。 - `dtype`:返回数组的数据类型。如果没有指定,则根据其他参数的情况推断数据类型。 - `axis`:生成样例的轴,默认为0。 示例如下: ```python import numpy as np # 生成一个包含5个等间隔样例的数组 x = np.linspace(0, 1, 5) print(x) ``` 输出结果为: ``` [0. 0.25 0.5 0.75 1. ] ``` 该函数的返回值是一个包含等间隔样例的一维数组。 ### 回答2: np.linspace()是NumPy库中的一个函数,用于在指定的范围内生成等间隔的一维数组。 它的语法如下: np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) - start:起始值 - stop:结束值 - num:在指定范围内生成的样本数量,默认为50 - endpoint:是否在结束值处包含该值,默认为True,即包含结束值 - retstep:是否返回步长,默认为False,不返回步长 - dtype:返回数组的数据类型,如果没有指定则会根据输入情况自动推断 np.linspace()会在指定的范围内生成num个等距的样本点,这些样本点会均匀地分布在指定的起始值和结束值之间。如果endpoint为True,则最后一个数值为结束值,否则不包含结束值。可以通过设置retstep参数为True来返回数组的步长。 np.linspace()常用于生成一些等分的数值范围,例如在数据可视化中使用,可以指定x轴或y轴的数值范围。它也可以用于生成一些特定范围的等间隔的样本数据,例如对某个函数进行采样,或者用于线性插值等应用场景。 总之,np.linspace()是NumPy库中很有用的一个函数,可以生成等间隔的一维数组,应用领域很广泛。 ### 回答3: np.linspace()是NumPy库中的一个函数,用于在指定的起始值和结束值之间生成等间隔的数值。 它的语法为:np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 参数说明: - start:起始值 - stop:结束值 - num:要生成的等间隔数值的个数,默认为50 - endpoint:是否包含结束值,默认为True,即包含结束值 - retstep:是否返回步长,默认为False,即不返回步长 - dtype:返回的数组的数据类型,默认为None,即由生成的数值自动推断数据类型 np.linspace()函数会在指定的起始值和结束值之间生成num个等间距的数值。如果endpoint参数为True,则结果数组中会包含结束值;如果endpoint参数为False,则结果数组不会包含结束值。 返回的数组中的数值会按照等间距分布,即相邻的两个数值之间的差值是相等的。 如果retstep参数为True,则会在返回结果中同时返回步长,步长的值会自动计算得出。而如果retstep参数为False,则不返回步长。 np.linspace()函数非常适用于生成一维数组,特别是在绘制图形时经常用到,可以用来生成均匀分布的x轴数据。 需要注意的是,由于np.linspace()生成的数值是等间距的,可能存在浮点数精度问题。如果对精度要求较高,可以使用其他函数来生成数值,如np.arange()或np.logspace()。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值