千家信息网

Python中range、np.arange和np.linspace的区别是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍Python中range、np.arange和np.linspace的区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. rangerange是pyt
千家信息网最后更新 2026年11月03日Python中range、np.arange和np.linspace的区别是什么

这篇文章主要介绍Python中range、np.arange和np.linspace的区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1. range

range是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组特殊的数,它的原型可以近似表示如下:

class range(stop)class range(start, stop, step=1)

(注意,Python是不允许定义两个类初始化函数的,其实其CPython实现更像是传入不定长参数*args,然后根据len(args)来进行不同的拆分,但我们这里遵循Python文档风格写法)

如果只传入stop参数,那么我们就默认在[0, stop)区间以步长1进行迭代。如果传入2或3个参数,则我们会将在[start, stop)区间以step步长(可选,默认为1)迭代 。注意,三个参数必须全部为整数值。

它的常见使用样例如下:

print(list(range(10)))# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]print(list(range(0, 30, 5)))# [0, 5, 10, 15, 20, 25]

当stop<=start时,而直接采用默认的step=1时,元素会为空:

print(list(range(0)))# []print(list(range(1, 0)))# []

此时的迭代我们需要将迭代步长设置为负:

print(list(range(0, -10, -1)))# [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

如果非法地传入非整数的参数,如:

print(list(range(10, 0.3)))

则会报以下的TypeError:

'float' object cannot be interpreted as an integer

最后提一下,我们常常会写下如下代码:

for i in range(10):    print(i)

此时Python解释器实质上会将range对象隐式转化为迭代器,等价于如下代码:

list_iterator = iter(range(10))try:    while True:        x = next(list_iterator)        print(x)except StopIteration:    pass

2. numpy.arange

numpy.arange是NumPy包的一个函数,它的功能与Python内置的range类似,它的原型可以近似表示为:

numpy.arange(stop, dtype=None, like=None)numpy.arange(start, stop, step=1, dtype=None, like=None)

(还是如前面所说,Python是不允许定义两个类初始化函数的,其实其CPython实现更像是传入不定长参数*args,然后根据len(args)来进行不同的拆分,但我们这里遵循Python文档风格写法)

其中start、step、step的使用与range类似,此处不再赘述,唯一的区别就是这3个参数都可以是小数。dtype为返回array的类型,如果没有给定则会从输入输入参数中推断。like为一个array-like的类型,它允许创建非NumPy arrays的arrays类型。

总结一下,该类与Python内置的range区别有两点:一是支持小数参数,二是返回ndarray类型而非像range那样常常做为(隐式转换为)list类型使用。

以下是其常见用例:

print(np.arange(3))# [0 1 2]print(np.arange(3.0))# [0. 1. 2.]print(np.arange(3,7))# [3 4 5 6]print(np.arange(3,7,2))# [3 5]print(np.arange(0, 5, 0.5))#[0.  0.5 1.  1.5 2.  2.5 3.  3.5 4.  4.5]

注意,在numpy.arange的使用过程中可能存在浮点稳定性的问题,从而导致下面这样的意想不到的结果:

print(np.arange(0, 5, 0.5, dtype=int))# [0 0 0 0 0 0 0 0 0 0]print(np.arange(-3, 3, 0.5, dtype=int))# [-3 -2 -1  0  1  2  3  4  5  6  7  8]

这是因为在np.arange的内部实现中,实际上的step值是按照公式dtype(start+step)-dtype(start)来计算的,而非直接采用step。当进行强制类型转换(上面例子中转为int,即朝0方向取整)或start远远比step大时,会出现精度的损失。在这种情况下,建议使用下面提到的np.linspace:

3. numpy.linspace

numpy.linspace也是Numpy内置的一个函数,它和numpy.arange类似,但是它不再是简单的[start, stop)左闭右开,也没有使用步长step,而是使用样本个数num。其函数原型如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

其中当endpoint采用默认的True时,start和stop表示序列的开始和初始值(闭区间[start, stop]),num为区间[start, stop]按照均匀(evenly)划分采样的样本数(包括边界start和stop在内)。不过需要注意的是,endpoint为True时stop才能做为最后一个样本,为False时区间内便不包括stop,此时会在区间[start,end]内按照总个数为num + 1个样本采样并去掉尾部样本(即stop点)组成。retstep位置为True则会返回(samples, step)元组,其中samples为生成的样本,step为样本之间的间隔步长。

注意,它的start、stop参数都可以为小数,但是当dtype设置为int时则就不能为小数。

numpy.linspace的常见使用样例如下:

print(np.linspace(2.0, 3.0, num=5))# array([2.  , 2.25, 2.5 , 2.75, 3.  ])

如果设置endpoint为True,则按照num+1个样本数量来采样,并去掉最后一个样本。

print(np.linspace(2.0, 3.0, num=5, endpoint=False))# [2.  2.2 2.4 2.6 2.8]

如果retstep设置为True,则除了返回生成的样本,还会返回样本之间的间隔步长。

print(np.linspace(2.0, 3.0, num=5, retstep=True))# (array([2.  ,  2.25,  2.5 ,  2.75,  3.  ]), 0.25)

下面我们用图形形象化地描述endpoint取True和取False的区别:

import matplotlib.pyplot as pltN = 8y = np.zeros(N)x1 = np.linspace(0, 10, N, endpoint=True)x2 = np.linspace(0, 10, N, endpoint=False)plt.plot(x1, y, 'o', color='orange')plt.plot(x2, y + 0.5, 'o', color='blue')plt.ylim([1, -0.5])plt.show()

图像显示如下:

可以看出橘色的点为np.linspace(0, 10, N, endpoint=True),按照总共8个点在[0, 10]采样,并包括stop边界10。蓝色的点为np.linspace(0, 10, N, endpoint=False),先按照总共9个点在[0, 10]采样最后再去掉最后一个点(即stop点10),最终得到间隙更密的8个点。

以上是"Python中range、np.arange和np.linspace的区别是什么"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

样本 参数 类型 步长 迭代 函数 区间 小数 原型 常见 不同 两个 个数 之间 代码 内容 写法 序列 文档 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技金融是不是互联网金融 深圳互联网络科技有限公司 成都互联网科技公司 汇久创客互联网科技 有木互联网科技 沃里互联网科技 长亮科技 互联网金融 科技大学互联网专业好不好 央行互联网金融科技公司 字节跳动和互联网科技 北京华百购互联网科技有限公司 知域互联网科技有限公司大骗子 济南有互联网科技公司吗 无锡工业互联网科技有限公司 昆明中奇联合互联网科技 易租星互联网科技有限公司 福仕德教育科技互联网 10位科技互联网大佬 河南商务圈互联网科技有限公司 互联网高科技绘画 互联网科技股 中资互联网科技 狮子座互联网科技培训 互联网科技公司的市场部门 互联网科技商业 恒生互联网科技指数跳水 乌鲁木齐新华智原互联网科技学校 烟台灵鸽互联网科技有限公司 中国主要互联网科技公司 广州全民伙伴互联网科技有限公司
0