从`torch`或`numpy`向量创建pytorch张量

问题描述

我正在尝试通过组装通过基本数学函数计算出的矢量的尺寸来创建一些测试torch张量。作为先驱:从原始python arrays组装Tensor可以正常工作:

import torch
import numpy as np
torch.Tensor([[1.0,0.8,0.6],[0.0,0.5,0.75]])
>> tensor([[1.0000,0.8000,0.6000],[0.0000,0.5000,0.7500]])

此外,我们可以从numpy数组中组合张量 https://pytorch.org/docs/stable/tensors.html

torch.tensor(np.array([[1,2,3],[4,5,6]]))
tensor([[ 1,[ 4,6]])

但是,从计算出的向量进行组装使我难以理解。以下是一些尝试:

X  = torch.arange(0,6.28)
x = X

torch.Tensor([[torch.cos(X),torch.tan(x)]])

torch.Tensor([torch.cos(X),torch.tan(x)])

torch.Tensor([np.cos(X),np.tan(x)])

torch.Tensor([[np.cos(X),np.tan(x)]])

torch.Tensor(np.array([np.cos(X),np.tan(x)]))

以上所有内容均存在以下错误

ValueError:只能将一个元素张量转换为Python标量

正确的语法是什么?

更新,请求发表一条评论显示x / X。它们实际上设置为相同(我改变了中途使用的思路)

In [56]: x == X                                                                                                                          
Out[56]: tensor([True,True,True])

In [51]:  x                                                                                                                              
Out[51]: tensor([0.,1.,2.,3.,4.,5.,6.])

In [52]: X                                                                                                                               
Out[52]: tensor([0.,6.])

解决方法

torch.arange返回一个割炬。张量如下所示-

X  = torch.arange(0,6.28)
x
>> tensor([0.,1.,2.,3.,4.,5.,6.])

类似地,torch.cos(x)torch.tan(x)返回torch.Tensor的实例

在火炬中连接张量序列的理想方法是使用torch.stack

torch.stack([torch.cos(x),torch.tan(x)])

输出

>> tensor([[ 1.0000,0.5403,-0.4161,-0.9900,-0.6536,0.2837,0.9602],[ 0.0000,1.5574,-2.1850,-0.1425,1.1578,-3.3805,-0.2910]])

如果您希望沿axis = 0进行串联,请改用torch.cat([torch.cos(x),torch.tan(x)])