Saya baru mengenal pytorch dan saya ingin mendapatkan nilai pada indeks dari matriks. Ada matriks bernama psfm_s yang telah diinisialisasi dengan psfm_s=Var(torch.randn(12,20),requires_grad=True) Misalnya, saya ingin mendapatkan nomor di kolom pertama (dari 12 kolom) dan nomor di baris pertama (dari 20 baris).

Saya telah mencoba melakukan sesuatu seperti index=torch.tensor([0,0])
num_at_index=psfm_s[index] untuk mendapatkan nomor yang diinginkan tetapi itu hanya memberi saya tensor dengan banyak angka di dalamnya, saya tidak begitu yakin apa yang terjadi dengan metode ini.

Saya hanya ingin satu nomor pada indeks yang diinginkan, bagaimana saya bisa melakukan ini jika itu mungkin? Terima kasih untuk bantuannya!

0
Fareed Mabrouk 7 Agustus 2019, 06:25

1 menjawab

Jawaban Terbaik

Untuk mereproduksi kode yang dijelaskan dalam kelengkapannya (untuk referensi di masa mendatang, berikan [mcve] dalam pertanyaan Anda), dan mengambil solusi yang sudah benar dari @jodag di komentar, pertimbangkan cuplikan kode ini:

from torch.autograd import Variable
import torch

psfm_s = Variable(torch.randn(12,20), requires_grad=True)
single_value = psfm_s[0,0].item()
print(single_value) # prints a single random number from your tensor

Untuk beberapa informasi latar belakang, pertimbangkan dokumen resmi:

Mengembalikan nilai tensor ini sebagai angka Python standar. Ini hanya berfungsi untuk tensor dengan satu elemen. Untuk kasus lain, lihat tolist().

Operasi ini tidak dapat dibedakan.

Akibatnya, mendapatkan baris (atau kolom) lengkap, akan terlihat seperti ini:

from torch.autograd import Variable
import torch

psfm_s = Variable(torch.randn(12,20), requires_grad=True)
single_row_tensor = psfm_s[0,:]
single_row_list = single_row_tensor.tolist()
single_row_numpy_1 = single_row_tensor.data.numpy()
single_row_numpy_2 = single_row_tensor.detach().numpy()

# the following doesn't work, as it is a torch.Variable with gradient history:
single_row_fail = single_row_tensor.numpy()

Jika Anda ingin mendapatkan array NumPy, Anda harus berhati-hati untuk tidak langsung mentransmisikannya ke .numpy(), karena ini menyebabkan masalah dengan riwayat gradien dari Variabel. Anda dapat menggunakan .data.numpy(), atau .detach().numpy().
Tampaknya ada beberapa diskusi untuk mana yang lebih disukai, tetapi keduanya harus bekerja untuk kasus Anda.

1
dennlinger 7 Agustus 2019, 08:19