Numpy 中 linspace 和 arrange 的用法和区别

在绘图或者计算函数值的时候,我们常常需要生成一些序列,比如生成 0~1000 之间的整数。这时,我们经常用到 Numpy 中的 linspace 和 arange 函数。然而稍不注意,两者就容易用错,特别是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.        ]

实际上这是错误的写法,它生成的序列为 [ 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、总结

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

2、如果要使 linspace 和 arrange 等效,可以用 linspace(初始值, 结束值, 值的个数, endpoint = False). 当然,两者有各自的使用场景,尽量不要混用。arrange 适用于知道序列中相邻两数之间的间隔的情况下,比如生成一定范围内奇数或者偶数的序列。linspace 适合序列长度和序列取值范围已知的情况。比如采样频率为1200 Hz, 也就是说 0~1s 之间有1200 个点。

    原文作者:liuzard
    原文地址: https://blog.csdn.net/u012995500/article/details/87817940
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞