记录np.arange和np.range

本文详细解析了Python中range()与numpy库中的arange()函数的主要区别。range()作为Python内置函数,仅支持整数步长;而arange()则能处理浮点数步长,适用于更广泛的数值操作场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区别在于range()函数是python内置函数,arange()是numpy多维数组库里面的库函数。前者所实现的数据间隔步长只能为整数,后者可以是浮点数。

>>> import numpy as np
>>> np.arange(1,10,0.2)
array([ 1. ,  1.2,  1.4,  1.6,  1.8,  2. ,  2.2,  2.4,  2.6,  2.8,  3. ,
        3.2,  3.4,  3.6,  3.8,  4. ,  4.2,  4.4,  4.6,  4.8,  5. ,  5.2,
        5.4,  5.6,  5.8,  6. ,  6.2,  6.4,  6.6,  6.8,  7. ,  7.2,  7.4,
        7.6,  7.8,  8. ,  8.2,  8.4,  8.6,  8.8,  9. ,  9.2,  9.4,  9.6,
        9.8])
        
>>> range(1.,10.,0.1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: range() integer end argument expected, got float.
### numpy arange 与 Python range 的区别 #### 1. 数据类型 `range` 是 Python 内置的函数,生成的是一个不可变的序列对象,称为 `range` 对象。它主要用于循环迭代,不能直接进行数学运算[^2]。 `np.arange` 是 NumPy 库中的函数,生成的是一个 NumPy 数组(`ndarray`)。NumPy 数组支持矢量化操作,可以方便地进行各种数学运算[^4]。 #### 2. 返回值类型 - `range` 返回的是一个 `range` 对象,例如:`range(0, 10)`。 - `np.arange` 返回的是一个 NumPy 数组,例如:`array([0, 1, 2, ..., 9])`。 #### 3. 范围定义 两者都可以通过指定起始值、结束值步长来定义范围: - `range(start, stop, step)` - `np.arange(start, stop, step)` 但是,`np.arange` 支持浮点数作为参数,而 `range` 只能接受整数作为参数。例如: ```python # 使用 range list(range(0, 10, 2)) # [0, 2, 4, 6, 8] # 使用 np.arange np.arange(0, 1, 0.1) # array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]) ``` #### 4. 性能差异 对于大规模数据处理,`np.arange` 的性能通常优于 `range`,因为它基于 C 语言实现,能够更高效地处理数组操作。然而,如果只是用于简单的循环迭代,`range` 更轻量级且内存占用更小。 #### 5. 矢量化支持 `np.arange` 生成的数组可以直接参与数学运算,而 `range` 对象则需要先转换为列表或其他可操作的数据结构。例如: ```python # 使用 range r = range(0, 10) try: r + r # TypeError: unsupported operand type(s) for +: 'range' and 'range' except TypeError as e: print(e) # 使用 np.arange a = np.arange(0, 10) b = a + a # 正常运行,结果为 array([0, 2, 4, ..., 18]) ``` #### 示例代码 以下是一个对比示例: ```python import numpy as np # range 示例 r = range(0, 10, 2) print(list(r)) # [0, 2, 4, 6, 8] # np.arange 示例 a = np.arange(0, 10, 2) print(a) # [0 2 4 6 8] # 尝试数学运算 try: r + r # TypeError except TypeError as e: print(e) b = a + a # 成功运行 print(b) # [0 4 8 12 16] ``` #### 总结 - 如果只需要生成一个整数序列用于循环迭代,推荐使用 `range`,因为它更节省内存。 - 如果需要生成浮点数序列或进行矢量化数学运算,推荐使用 `np.arange`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值