np.linspace 和 np.arange 有什么区别?

Sab*_* 錆兎 14 python numpy range linspace

我一直用np.arange. 我最近遇到了np.linspace。我想知道它们之间到底有什么区别......查看他们的文档:

np.arange

返回给定间隔内均匀间隔的值。

np.linspace

返回指定间隔内均匀间隔的数字。

我能看到的唯一区别是linspace有更多的选择......比如选择包含最后一个元素。

您会推荐这两个中的哪一个,为什么?在哪些情况下np.linspace更胜一筹?

war*_*ped 32

np.linspace允许您定义获得的值的数量,包括指定的最小值和最大值。它推断步长:

>>> np.linspace(0,1,11)
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
Run Code Online (Sandbox Code Playgroud)

np.arange 允许您定义步长并推断步数(您获得的值数)。

>>> np.arange(0,1,.1)
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
Run Code Online (Sandbox Code Playgroud)

来自user2357112 的贡献:

np.arange 排除最大值,除非舍入错误使它不这样做。

例如,由于舍入错误,会出现以下结果:

>>> numpy.arange(1, 1.3, 0.1)
array([1. , 1.1, 1.2, 1.3])
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法排除该stop值(在我们的示例 1.3 中)endpoint=False

>>> numpy.linspace(1, 1.3, 3, endpoint=False)
array([1. , 1.1, 1.2])
Run Code Online (Sandbox Code Playgroud)

  • “它排除最大值” - 除非舍入误差导致它不这样做,所以坚持使用“linspace”。如果您想使用“linspace”排除正确的端点,可以指定“endpoint=False”。 (2认同)

小智 6

numpy.linspacenumpy.arange可以产生两个看似相同但实际上不同的变量。这肯定和数据内部如何存储有关。当我使用 创建 ndarrays 时arange,内存中的大小随着元素的数量而缩放。然而,ndarray创建的使用linspace保持相同的大小。

from sys import getsizeof
import numpy as np
arr_lnspc5 = np.linspace(1,5,5)
arr_lnspc20 = np.linspace(1,20,20)
arr_arange5 = np.arange(1,6,1.0)
arr_arange20 = np.arange(1,21,1.0)

print(f'lnspc5   ==============')
print(f'Val: {arr_lnspc5}')
print(f'Type: {type(arr_lnspc5)}')
print(f'Size: {getsizeof(arr_lnspc5)} Bytes \n')

print(f'lnspc20  ==============')
print(f'Val: {arr_lnspc20}')
print(f'Type: {type(arr_lnspc20)}')
print(f'Size: {getsizeof(arr_lnspc20)} Bytes \n')

print(f'arange5  ==============')
print(f'Val: {arr_arange5}')
print(f'Type: {type(arr_arange5)}')
print(f'Size: {getsizeof(arr_arange5)} Bytes \n')

print(f'arange20 ==============')
print(f'Val: {arr_arange20}')
print(f'Type: {type(arr_arange20)}')
print(f'Size: {getsizeof(arr_arange20)} Bytes \n')
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

lnspc5   ==============
Val: [1. 2. 3. 4. 5.]
Type: <class 'numpy.ndarray'>
Size: 112 Bytes 

lnspc20  ==============
Val: [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.]
Type: <class 'numpy.ndarray'>
Size: 112 Bytes 

arange5  ==============
Val: [1. 2. 3. 4. 5.]
Type: <class 'numpy.ndarray'>
Size: 152 Bytes 

arange20 ==============
Val: [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.]
Type: <class 'numpy.ndarray'>
Size: 272 Bytes 
Run Code Online (Sandbox Code Playgroud)


小智 5

np.arange(start, stop, step)
np.linspace(start,stop,number)
Run Code Online (Sandbox Code Playgroud)

例子:

np.arange(0,10,2)    o/p --> array([0,2,4,6,8])
np.linspace(0,10,2)  o/p --> array([0., 10.])
Run Code Online (Sandbox Code Playgroud)