20.1. Utworzenie tensora

# Wczytanie biblioteki.
import torch

# Utworzenie wektora przedstawiającego wiersz.
tensor_row = torch.tensor([1, 2, 3])

# Utworzenie wektora przedstawiającego kolumnę.
tensor_column = torch.tensor(
    [
        [1],
        [2],
        [3]
    ]
)





20.2. Utworzenie tensora z poziomu NumPy

# Wczytanie bibliotek.
import numpy as np
import torch

# Utworzenie tablicy biblioteki NumPy.
vector_row = np.array([1, 2, 3])

# Utworzenie tensora na podstawie tablicy NumPy.
tensor_row = torch.from_numpy(vector_row)





20.3. Utworzenie tensora rzadkiego

# Wczytanie biblioteki.
import torch

# Utworzenie tensora.
tensor = torch.tensor(
[
[0, 0],
[0, 1],
[3, 0]
]
)

# Utworzenie tensora rzadkiego na podstawie zwykłego tensora.
sparse_tensor = tensor.to_sparse()





print(type(tensor))
print(type(sparse_tensor))

<class 'torch.Tensor'>
<class 'torch.Tensor'>





20.4. Wybór elementów tensora

# Wczytanie biblioteki.
import torch

# Utworzenie wektora tensora.
vector = torch.tensor([1, 2, 3, 4, 5, 6])

# Utworzenie macierzy tensora.
matrix = torch.tensor(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)

# Pobranie trzeciego elementu wektora.
vector[2]
tensor(3)

# Pobranie drugiego wiersza, drugiej kolumny.
matrix[1,1]
tensor(5)





# Zaznaczenie wszystkich elementów wektora.
vector[:]
array([1, 2, 3, 4, 5, 6])

# Zaznaczenie wszystkich elementów wektora aż do trzeciego włącznie.
vector[:3]
tensor([1, 2, 3])

# Zaznaczenie wszystkich elementów wektora po trzecim.
vector[3:]
tensor([4, 5, 6])

# Zaznaczenie ostatniego elementu.
vector[-1]
tensor(6)

# Zaznaczenie dwóch pierwszych wierszy i wszystkich kolumn macierzy.
matrix[:2,:]
tensor([[1, 2, 3],
       [4, 5, 6]])

# Zaznaczenie wszystkich wierszy i drugiej kolumny.
matrix[:,1:2]
tensor([[2],
       [5],
       [8]])





# Odwrócenie wektora.
vector[::-1]

ValueError: step must be greater than zero





vector.flip(dims=(-1,))
tensor([6, 5, 4, 3, 2, 1])





20.5. Opisanie tensora

# Wczytanie biblioteki.
import torch

# Utworzenie tensora.
tensor = torch.tensor([[1,2,3], [1,2,3]])

# Pobranie kształtu tensora.
tensor.shape
torch.Size([2, 3])

# Pobranie typu danych elementów tensora.
tensor.dtype
torch.int64

# Pobranie układu tensora.
tensor.layout
torch.strided

# Pobranie urządzenia używanego przez tensor.
tensor.device

device(type='cpu')





20.6. Przeprowadzanie operacji na elementach tensora

# Wczytanie biblioteki.
import torch

# Utworzenie tensora.
tensor = torch.tensor([1, 2, 3])

# Rozgłaszanie operacji arytmetycznej we wszystkich elementach tensora.
tensor * 100
tensor([100, 200, 300])





20.7. Wyszukiwanie wartości minimalnej i maksymalnej

# Wczytanie biblioteki.
import torch

# Utworzenie tensora.
torch.tensor([1,2,3])

# Wyszukanie największej wartości.
tensor.max()

tensor(3)

# Wyszukanie najmniejszej wartości.
tensor.min()

tensor(1)





# Utworzenie tensora wielowymiarowego.
tensor = torch.tensor([[1,2,3],[1,2,5]])

# Wyszukanie największej wartości.
tensor.max()

tensor(5)





20.8. Zmiana kształtu tensora

# Wczytanie biblioteki.
import torch

# Utworzenie tensora o kształcie 4×3.
tensor = torch.tensor([[1, 2, 3],
                       [4, 5, 6],
                       [7, 8, 9],
                       [10, 11, 12]])

# Zmiana kształtu tensora na 2×6.
tensor.reshape(2, 6)

tensor([[ 1,  2,  3,  4,  5,  6],
        [ 7,  8,  9, 10, 11, 12]])





20.9. Transponowanie tensora

# Wczytanie biblioteki.
import torch

# Utworzenie tensora dwuwymiarowego.
tensor = torch.tensor([[[1,2,3]]])

# Transponowanie tensora.
tensor.mT

tensor([[1],
        [2],
        [3]])





tensor.permute(*torch.arange(tensor.ndim - 1, -1, -1))

tensor([[1],
        [2],
        [3]])





20.10. Spłaszczanie tensora

# Wczytanie biblioteki.
import torch

# Utworzenie tensora.
tensor = torch.tensor([[1, 2, 3],
                       [4, 5, 6],
                       [7, 8, 9]])

# Spłaszczenie tensora
tensor.flatten()
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])





20.11. Obliczenie iloczynu skalarnego

# Wczytanie biblioteki.
import torch

# Utworzenie pierwszego tensora.
tensor_1 = torch.tensor([1, 2, 3])

# Utworzenie drugiego tensora.
tensor_2 = torch.tensor([4, 5, 6])

# Obliczenie iloczynu skalarnego obu tensorów.
tensor_1.dot(tensor_2)
tensor(32)





20.12. Mnożenie tensorów

# Wczytanie biblioteki.
import torch

# Utworzenie pierwszego tensora.
tensor_1 = torch.tensor([1, 2, 3])

# Utworzenie drugiego tensora.
tensor_2 = torch.tensor([4, 5, 6])

# Mnożenie dwóch tensorów
tensor_1 * tensor_2
tensor([ 4, 10, 18])





tensor_1+tensor_2
tensor([5, 7, 9])





tensor_1-tensor_2
tensor([-3, -3, -3])





tensor_1/tensor_2
tensor([0.2500, 0.4000, 0.5000])
