图解torch.arange()和torch.linspace()的区别

489 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

图解torch.arange()和torch.linspace()的区别

1、官方文档说明

其中start表示生成序列的初始索引值,stop表示生成序列的结束值(序列不包括结束值),step表示间隔数

官方文档中给出了三种生成序列的方法,分别是:

  • torch.arange(stop)
  • torch.arange(start, stop)
  • torch.arange(start, stop, step)

可以简单给出生成序列的公式:

{xixi[start,stop)(xi+1=xi+step)}\{x_i|x_i\in[start, stop)\land({x_{i+1}=x_i+step})\}

按照官方给的说明,进行一下模拟

import torch

a = torch.arange(10)
b = torch.arange(0, 10)
c = torch.arange(0, 10, 2)

print(a)
print(b)
print(c)

使用上述三种方法生成的序列:

tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
tensor([0, 2, 4, 6, 8])

按照序列生成散点图,直观展示:

import matplotlib.pyplot as plt
plt.scatter(a, torch.zeros_like(a))
plt.xlim(0, 10)
plt.show()

plt.scatter(b, torch.zeros_like(b))
plt.xlim(0, 10)
plt.show()

plt.scatter(c, torch.zeros_like(c))
plt.xlim(0, 10)
plt.show()

torch.linspace()生成序列与torch.arange()不同的地方在于,linspace需要指定序列元素的个数,由机器自动计算出step值,而arange是通过指定step值生成序列,在不输入step值的情况下,step值默认为1.

以下是官方文档给出的解释:

官方的解释中,linspace的参数start表示初始值,end表示最后一个取值,steps表示序列元素的个数(这里注意arange用的是step单数)

同样,可以表示公式:

{xixi[start,end](xi+1=xi+step)(step=endstartsteps1)}\{x_i|x_i\in[start, end]\land({x_{i+1}=x_i+step})\land(step=\frac{end-start}{steps-1})\}

模拟生成序列:

a = torch.linspace(1, 10, 10)
b = torch.linspace(1, 10, 2)
c = torch.linspace(1, 10, 3)
print(a)
print(b)
print(c)

生成序列的结果:

tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
tensor([ 1., 10.])
tensor([ 1.0000,  5.5000, 10.0000])

绘制散点图,直观显示生成结果:

plt.scatter(a, torch.zeros_like(a))
plt.xlim(0, 10)
plt.show()

plt.scatter(b, torch.zeros_like(b))
plt.xlim(0, 10)
plt.show()

plt.scatter(c, torch.zeros_like(c))
plt.xlim(0, 10)
plt.show()