n_inc = torch.tensor(1)
theta = torch.tensor(0.6109)
phi = torch.tensor(0)
k0 = torch.tensor(6.2832)
kinc = k0*n_inc*[torch.sin(theta)*torch.cos(phi),
torch.sin(theta)*torch.sin(phi),
torch.cos(theta)]
print(kinc)
когда я запускаю код, он показывает следующее сообщение об ошибке:
TypeError: можно преобразовать только целочисленные тензоры одного элемента к индексу
Может ли кто-нибудь помочь мне решить эту проблему?
Спасибо @Hamza за указание на ошибку. Код работает с использованием Numpy
. Не нашел прямого способа сделать это с помощью PyTorch
.
'''
import numpy as np
import torch
theta = 0.6109
phi = 0.0
k0 = 6.2832
n_inc = 1.0
kinc = k0*n_inc*np.array([np.sin(theta)*np.cos(phi),
np.sin(theta)*np.sin(phi),
np.cos(theta)])
kinc = torch.tensor(kinc)
print(kinc)
'''
Предполагая, что вы знаете, что когда вы умножаете список на число, список дублируется с количеством раз, эквивалентным этому числу. Это число должно быть целым числом, иначе вы получите ошибку, которая у вас была:
torch.tensor(0.6109)*[torch.sin(theta)*torch.cos(phi), #<--- it throws an error
torch.sin(theta)*torch.sin(phi),
torch.cos(theta)]
Если вы хотите повторить список, вам нужно только умножить список на целочисленный тензор, а не на тензор с плавающей запятой.
Если вы хотите умножить целочисленный тензор на каждый элемент в списке. Вы должны только преобразовать список в массив NumPy:
kinc = k0*n_inc*np.array([torch.sin(theta)*torch.cos(phi), #<- NumPy array not a list
torch.sin(theta)*torch.sin(phi),
torch.cos(theta)])
Вам не нужно преобразовывать sin и cos в тип NumPy.
@galib Ваша логика неверна, как вы хотите повторить список с 0,678 раза? Как вы это сделали с numpy? Я думаю, вам следует добавить к своему вопросу, как вы это сделали с помощью numpy, чтобы понять, что вы пытаетесь сделать, и иметь возможность изменить свой ответ на Pytorch.
извини. Возможно, вы не поняли этого из-за моей формулировки. Я добавил код Numpy
Да, ты прав. Я смог сделать это с помощью массива NumPy, а затем преобразовать результат в тензор факела. Есть ли способ сделать это напрямую с PyTorch?