Python – numpy.linspace()
作为序列生成器,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]]]。