DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

1

empty_strided in PyTorch

Buy Me a Coffee

*My post explains empty() and empty_like().

empty_strided() can create the 0D or more D strided tensor with the zero or more floating-point numbers(Default), integers, complex numbers or boolean values from uninitialized memory which are called uninitialized data as shown below:

*Memos:

  • empty_strided() can be used with torch but not with a tensor.
  • The 1st argument with torch is size(Required-Type:tuple of int, list of int, or size()).
  • The 2nd argument with torch is stride(Required-Type:tuple of int or list of int).
  • There is dtype argument with torch(Optional-Default:None-Type:dtype): *Memos:
  • There is device argument with torch(Optional-Defalut:None-Type:str, int or device()): *Memos:
  • There is requires_grad argument with torch(Optional-Default:False-Type:bool): *Memos:
    • requires_grad= must be used.
    • My post explains requires_grad argument.
  • The number of size and stride must be the same.
  • Uninitialized memory has data but the data is unknown.
import torch

torch.empty_strided(size=(), stride=())
torch.empty_strided(size=torch.tensor(8).size(), stride=())
# tensor(1.2770e+19)

torch.empty_strided(size=(0,), stride=(0,))
torch.empty_strided(size=(0,), stride=(1,))
torch.empty_strided(size=(0,), stride=(2,))
torch.empty_strided(size=torch.tensor([]).size(), stride=(0,))
# tensor([])

torch.empty_strided(size=(3,), stride=(0,))
torch.empty_strided(size=torch.tensor([8, 3, 6]).size(), stride=(0,))
# tensor([7.4511e-33, 7.4511e-33, 7.4511e-33])

torch.empty_strided(size=(3,), stride=(1,))
torch.empty_strided(size=torch.tensor([8, 3, 6]).size(), stride=(1,))
# tensor([9.7245e-33, 3.1678e-41, 9.6997e-33])

torch.empty_strided(size=(3,), stride=(2,))
torch.empty_strided(size=torch.tensor([8, 3, 6]).size(), stride=(2,))
# tensor([-5.0667e-38,  4.4842e-44,  8.9683e-44])

torch.empty_strided((3, 2), stride=(0, 0))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(0, 0))
# tensor([[-8.4397e-35, -8.4397e-35],
#         [-8.4397e-35, -8.4397e-35],
#         [-8.4397e-35, -8.4397e-35]])

torch.empty_strided((3, 2), stride=(0, 1))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(0, 1))
# tensor([[9.7001e-33, 3.1678e-41],
#         [9.7001e-33, 3.1678e-41],
#         [9.7001e-33, 3.1678e-41]])

torch.empty_strided((3, 2), stride=(0, 2))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(0, 2))
# tensor([[1.4013e-45, -1.7014e+38],
#         [1.4013e-45, -1.7014e+38],
#         [1.4013e-45, -1.7014e+38]])

torch.empty_strided((3, 2), stride=(1, 0))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(1, 0))
# tensor([[-8.4397e-35, -8.4397e-35],
#         [4.5188e-41, 4.5188e-41],
#         [9.7611e-33, 9.7611e-33]])

torch.empty_strided((3, 2), stride=(1, 1))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(1, 1))
# tensor([[-8.4397e-35, 4.5188e-41],
#         [4.5188e-41, 9.7396e-33],
#         [9.7396e-33, 3.1678e-41]])

torch.empty_strided((3, 2), stride=(1, 2))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(1, 2))
# tensor([[1.7340e-07, 6.8988e-07],
#         [1.6599e-07, 1.2539e+16],
#         [6.8988e-07, 2.1707e-18]])

torch.empty_strided((3, 2), stride=(2, 0))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(2, 0))
# tensor([[-8.4397e-35, -8.4397e-35],
#         [9.7265e-33, 9.7265e-33],
#         [6.6757e-07, 6.6757e-07]])

torch.empty_strided((3, 2), stride=(2, 1))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(2, 1))
# tensor([[-8.4397e-35, 4.5188e-41],
#         [9.6884e-33, 3.1678e-41],
#         [4.4842e-44, 0.0000e+00]])

torch.empty_strided((3, 2), stride=(2, 2))
torch.empty_strided(size=torch.tensor([[8, 3], [6, 0], [2, 9]]).size(),
                    stride=(2, 2))
# tensor([[6.7121e-07, 1.3085e-11],
#         [1.3085e-11, 1.6690e+22],
#         [1.6690e+22, 2.1707e-18]])
etc.

torch.empty_strided(size=(3, 2, 4), stride=(0, 1, 2))
# tensor([[[-8.4397e-35, -8.4397e-35, 4.4842e-44, 1.1210e-43],
#          [4.5188e-41, 4.5188e-41, 0.0000e+00, 0.0000e+00]],
#         [[-8.4397e-35, -8.4397e-35, 4.4842e-44, 1.1210e-43],
#          [4.5188e-41, 4.5188e-41, 0.0000e+00, 0.0000e+00]],
#         [[-8.4397e-35, -8.4397e-35, 4.4842e-44, 1.1210e-43],
#          [4.5188e-41, 4.5188e-41, 0.0000e+00, 0.0000e+00]]])

torch.empty_strided(size=(3, 2, 4), stride=(0, 1, 2), dtype=torch.int64)
# tensor([[[0, 97092179969056, 0, 0],
#          [97092200351808, 138498049810784, 0, 0]],
#         [[0, 97092179969056, 0, 0],
#          [97092200351808, 138498049810784, 0, 0]],
#         [[0, 97092179969056, 0, 0],
#          [97092200351808, 138498049810784, 0, 0]]])

torch.empty_strided(size=(3, 2, 4), stride=(0, 1, 2), dtype=torch.complex64)
# tensor([[[-8.4397e-35+4.5188e-41j, 9.6886e-33+3.1678e-41j,
#           0.0000e+00+0.0000e+00j, 1.3829e-33+3.1678e-41j],
#          [9.6840e-33+3.1678e-41j, 0.0000e+00+0.0000e+00j,
#           9.8336e-33+3.1678e-41j, -3.8910e-25+4.5186e-41j]],
#         [[-8.4397e-35+4.5188e-41j, 9.6886e-33+3.1678e-41j,
#           0.0000e+00+0.0000e+00j, 1.3829e-33+3.1678e-41j],
#          [9.6840e-33+3.1678e-41j, 0.0000e+00+0.0000e+00j,
#           9.8336e-33+3.1678e-41j, -3.8910e-25+4.5186e-41j]],
#         [[-8.4397e-35+4.5188e-41j, 9.6886e-33+3.1678e-41j,
#           0.0000e+00+0.0000e+00j, 1.3829e-33+3.1678e-41j],
#          [9.6840e-33+3.1678e-41j, 0.0000e+00+0.0000e+00j,
#           9.8336e-33+3.1678e-41j, -3.8910e-25+4.5186e-41j]]])

torch.empty_strided(size=(3, 2, 4), stride=(0, 1, 2), dtype=torch.bool)
# tensor([[[True, True, True, False],
#          [True, True, True, False]],
#         [[True, True, True, False],
#          [True, True, True, False]],
#         [[True, True, True, False],
#          [True, True, True, False]]])
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more