Python – numpy.linspace()

时间:2020-02-23 14:43:05  来源:igfitidea点击:

作为序列生成器,numpy.linspace()函数用于在线性空间中以统一步长生成数字序列。

Numpy通常可以使用numpy.arange()生成序列,但是当我们使用浮点参数时,可能会导致精度损失,这可能会导致不可预测的输出。

为了避免由于浮点精度而造成的任何精度损失,numpy在numpy.linspace()中为我们提供了一个单独的序列生成器,如果您已经知道所需元素的数量,则这是首选。
但是通常使用带有适当参数的linspace()和arange()可以获得相同的输出,因此可以为同一任务选择两者。

例如,以下代码使用numpy.linspace()在0到10之间绘制2个线性序列,以显示该序列产生的一致性。

import numpy as np
import matplotlib.pyplot as plt

y = np.zeros(5)
x1 = np.linspace(0, 10, 5)
x2 = np.linspace(0, 10, 5)
plt.plot(x1, y, 'o')
plt.plot(x2, y + 0.5, 'o')
plt.ylim([-0.5, 1])
plt.show()

语法

格式:array = numpy.linspace(start,end,num = num_points)将在start和end之间生成一个统一的序列,共有num_points个元素。

其中

  • start->范围的起点(包括)
  • end->范围的端点(包括)
  • num->序列中的总点数

让我们通过几个示例来了解这一点:

import numpy as np

a = np.linspace(0.02, 2, 10)

print('Linear Sequence from 0.02 to 2:', a)
print('Length:', len(a))

输出

Linear Sequence from 0.02 to 2: [0.02 0.24 0.46 0.68 0.9  1.12 1.34 1.56 1.78 2.  ]
Length: 10

上面的代码段生成了0.02到2之间的均匀序列,其中包含10个元素。

端点关键字参数

如果您不想在序列计算中包括最后一点,则可以使用另一个关键字参数"端点",可以将其设置为"假"。
(默认为True)

import numpy as np

a = np.linspace(0.02, 2, 10, endpoint=False)

print('Linear Sequence from 0.02 to 2:', a)
print('Length:', len(a))

输出

Linear Sequence from 0.02 to 2: [0.02  0.218 0.416 0.614 0.812 1.01  1.208 1.406 1.604 1.802]
Length: 10

如您所见,最后一点(2)没有包含在序列中,因此步长也不同,这将产生一个完全不同的序列。

retstep关键字参数

这是一个布尔型可选参数(如果已指定),还返回步长以及序列数组,从而产生一个元组作为输出

import numpy as np

a = np.linspace(0.02, 2, 10, retstep=True)

print('Linear Sequence from 0.02 to 2:', a)
print('Length:', len(a))

输出

Linear Sequence from 0.02 to 2: (array([0.02, 0.24, 0.46, 0.68, 0.9 , 1.12, 1.34, 1.56, 1.78, 2.  ]), 0.22)
Length: 2

由于输出是元组,因此长度为2,而不是10!

axis关键字参数

这将在结果中设置轴以存储示例。
仅当开始和端点为数组数据类型时才使用它。

默认情况下(" axis = 0"),示例将沿着在开始处插入的新轴进行。
我们可以使用" axis = -1"来获得最后一个轴。

import numpy as np

p = np.array([[1, 2], [3, 4]])
q = np.array([[5, 6], [7, 8]])

r = np.linspace(p, q, 3, axis=0)
print(r)
s = np.linspace(p, q, 3, axis=1)
print(s)

输出

array([[[1., 2.],
      [3., 4.]],

     [[3., 4.],
      [5., 6.]],

     [[5., 6.],
      [7., 8.]]])

array([[[1., 2.],
      [3., 4.],
      [5., 6.]],

     [[3., 4.],
      [5., 6.],
      [7., 8.]]])

在第一种情况下,由于" axis = 0",我们从第一个轴取序列限制。

这里的限制是子数组对[1,2]和[5,6]以及[3,4]和[7,8],它们取自p和q现在,我们比较结果对中的相应元素以生成序列。

因此,第一行的顺序为[[[1至5],[2至6]]],第二行的顺序为[[3至7],[4至8]]。
并组合成[[[[1,2],[3,4]],[[3,4],[5,6]],[[5,6],[7,8]]],

第二种情况是在" axis = 1"或者列中插入新元素。
因此,新轴将通过列序列生成。
而不是行序列。

考虑序列[[1,2]到[5,7][3,4]到[7,8]并将其插入结果的列中,得到[[[1,2] ,[3,4],[5,6]],[[3,4],[5,6],[7,8]]]。