Numpy 中 linspace 和 arrange 的用法和区别

在绘图或者计算函数值的时候,我们常常需要生成一些序列,比如生成 0~1000 之间的整数。这时,我们经常用到 Numpy 中的 linspacearange 函数。然而稍不注意,两者就容易用错,特别是 linspace,现在对两者的用法和区别说明如下,并指出两者容易用错的地方。

1、arange 函数的用法

为了便于分析,我们假设要生成 0~10 间的整数序列 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],首先 arange 的用法如下:

import numpy as np
x = np.arange(0, 10, 1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意,没有10

这是arange 的用法:
arange(起始值,结束值,间隔)
需要注意的是,结束值(本例中为10)并不包含在生成的序列中

2、linspace 函数的用法

同样,我们可以用 linespace 函数来生成这个序列,它的用法为:
linspace(起始值,结束值,起始值和结束值之间的个数)
这样就可以生成等分间隔的序列。
针对上述问题,我们很容易想当然地写出以下代码:

x = np.linspace(0, 10, 10) 

实际上这是错误的写法,它生成的序列为 [ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ],很显然,不符合我们的预期,那么问题出在哪里呢? 它的问题出在 linespace 函数把结束值也包含在生成的序列中,所以两数之间的间隔就变成了10/9,要解决这个问题,有两种办法:

第一种方法是把 linspace 的结束值设为 9:

x = np.linspace(0, 9, 10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

第二种方法是让linspace 函数生成的序列不包含结束值:

x = np.linspace(0, 10, 10, endpoint=False) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3、总结

  • arange(初始值,结束值,间隔) 生成的序列不包含结束值
    linspace(初始值, 结束值, 值的个数) 生成的序列包含结束值。

  • 如果要使 linspace 和 arrange 等效,可以用 linspace(初始值, 结束值, 值的个数, endpoint = False)

  • 两者有各自的使用场景,尽量不要混用
    arrange 适用于知道序列中相邻两数之间的间隔的情况下,比如生成一定范围内奇数或者偶数的序列。
    linspace 适合序列长度和序列取值范围已知的情况,比如采样频率为1200 Hz, 也就是说 0~1s 之间有1200 个点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值