Use Pytorch to accelerate with GPU or apple silicon with Metal
sequenceDiagram
participant 1D as 1D Tensor
participant 2D as 2D Tensor
participant 3D as 3D Tensor
Note over 1D: Start: tensor([1, 2, 3, 4])<br>Shape: [4]
rect rgb(230, 245, 255)
Note over 1D,3D: 1D → 2D Transformations
1D->>2D: unsqueeze(0)
Note right of 2D: [1, 4]: [[1, 2, 3, 4]]
1D->>2D: view(2, 2)
Note right of 2D: [2, 2]: [[1, 2], [3, 4]]
1D->>2D: reshape(2, 2)
Note right of 2D: [2, 2]: [[1, 2], [3, 4]]
end
rect rgb(245, 230, 255)
Note over 1D,3D: 2D → 3D Transformations
Note over 2D: From: tensor([[1, 2], [3, 4]])<br>Shape: [2, 2]
2D->>3D: unsqueeze(0)
Note right of 3D: [1, 2, 2]: [[[1, 2], [3, 4]]]
2D->>3D: view(1, 2, 2)
Note right of 3D: [1, 2, 2]: [[[1, 2], [3, 4]]]
2D->>3D: expand(2, 2, 2)
Note right of 3D: [2, 2, 2]: Broadcasts data
end
rect rgb(255, 230, 230)
Note over 1D,3D: Reverse Transformations
3D->>2D: squeeze(0)
Note right of 2D: [2, 2]: [[1, 2], [3, 4]]
2D->>1D: flatten()
Note right of 1D: [4]: [1, 2, 3, 4]
end
Note over 1D,3D: All Available PyTorch Tensor Commands:
rect rgb(240, 255, 240)
Note over 1D,3D: Basic Dimension Commands
Note right of 3D: unsqueeze(dim)<br>squeeze(dim)<br>squeeze()<br>flatten(start_dim, end_dim)<br>view(*shape)<br>view_as(other)<br>reshape(*shape)<br>reshape_as(other)<br>expand(*sizes)<br>expand_as(other)
end
rect rgb(255, 240, 220)
Note over 1D,3D: Dimension Reordering
Note right of 3D: t()<br>transpose(dim0, dim1)<br>permute(*dims)<br>movedim(source, destination)<br>swapaxes(dim0, dim1)<br>swapdims(dim0, dim1)
end
rect rgb(230, 245, 255)
Note over 1D,3D: Splitting & Combining
Note right of 3D: chunk(chunks, dim)<br>split(split_size, dim)<br>split_with_sizes(split_sizes, dim)<br>stack(tensors, dim)<br>cat(tensors, dim)<br>unbind(dim)
end
rect rgb(245, 230, 255)
Note over 1D,3D: Indexing & Selection
Note right of 3D: narrow(dim, start, length)<br>select(dim, index)<br>index_select(dim, index)<br>masked_select(mask)<br>take(index)<br>take_along_dim(indices, dim)<br>gather(dim, index)<br>scatter(dim, index, src)
end
rect rgb(255, 230, 230)
Note over 1D,3D: Advanced Operations
Note right of 3D: unfold(dimension, size, step)<br>diagonal(offset, dim1, dim2)<br>as_strided(size, stride)<br>roll(shifts, dims)<br>tile(*reps)<br>repeat(*sizes)<br>repeat_interleave(repeats, dim)
end
rect rgb(230, 255, 230)
Note over 1D,3D: Memory & Layout
Note right of 3D: contiguous()<br>clone()<br>detach()<br>to(device)<br>cpu()<br>cuda()<br>pin_memory()
end
rect rgb(255, 255, 230)
Note over 1D,3D: Shape Inspection
Note right of 3D: size()<br>dim()<br>ndim<br>numel()<br>shape<br>stride()<br>storage_offset()<br>is_contiguous()
end
Note over 1D,3D: Common Combined Operations:<br>x.view(-1).unsqueeze(0) # Flatten and add batch dim<br>x.permute(0,2,1).contiguous() # Reorder and optimize<br>x.squeeze().view(-1) # Remove singleton dims and flatten
Leave a Reply