PyTorch Tensor Methods – How to Create Tensors in Python
By Srijan
PyTorch is an open-source Python-based library. It provides high flexibility and speed while building, training, and deploying deep learning models.
At its core, PyTorch involves operations involving tensors. A tensor is a number, vector, matrix, or any n-dimensional array.
In this article, we will see different ways of creating tensors using PyTorch tensor methods (functions).
Topics we'll cover
- tensor
- zeros
- ones
- full
- arange
- linspace
- rand
- randint
- eye
- complex
The tensor() method
This method returns a tensor when data
is passed to it. data
can be a scalar, tuple, a list or a NumPy array.
In the above example, a NumPy array that was created using np.arange()
was passed to the tensor()
method, resulting in a 1-D tensor.
We can create a multi-dimensional tensor by passing a tuple of tuples, a list of lists, or a multi-dimensional NumPy array.
When an empty tuple or list is passed into tensor()
, it creates an empty tensor.
The zeros() method
This method returns a tensor where all elements are zeros, of specified size
(shape). The size
can be given as a tuple or a list or neither.
We could have passed 3, 2
inside a tuple or a list as well. It is self-explainable that passing negative numbers or a float would result in a run time error.
Passing an empty tuple or an empty list gives a tensor of size (dimension) 0, having 0 as its only element, whose data type is float.
The ones() method
Similar to zeros()
, ones()
returns a tensor where all elements are 1, of specified size
(shape). The size
can be given as a tuple or a list or neither.
Like zeros()
, passing an empty tuple or list gives a tensor of 0 dimension, having 1 as the sole element, whose data type is float.
The full() method
What if you want all the elements of a tensor to be equal to some value but not only 0 and 1? Maybe 2.9?
full()
returns a tensor of a shape given by the size
argument, with all its elements equal to the fill_value
.
Here, we have created a tensor of shape 3, 2
with the fill_value
as 3. Here again, passing an empty tuple or list creates a scalar tensor of zero dimension.
While using full
, it is necessary to give size
as a tuple or a list.
The arange() method
This method returns a 1-D tensor, with elements from start
(inclusive) to end
(exclusive) with a common difference step
. The default value for start
is 0 while that for step
is 1.
The elements of the tensor can be said to be in Arithmetic Progression, with step
as common difference.
Here, we created a tensor which starts from 2 and goes until 20 with a step
(common difference) of 2.
All the three parameters, start
, end
and step
can be positive, negative or float.
While choosing start
, end
, and step
, we need to ensure that start
and end
are consistent with the step
sign.
Since step
is set as -2, there is no way -42 can reach -22 (exclusive). Hence, it gives an error.
The linspace() method
This method returns a 1-D dimensional tensor, with elements from start
(inclusive) to end
(inclusive). However, unlike arange()
, here, steps
isn't the common difference but the number of elements to be in the tensor.
PyTorch automatically decides the common difference based on the steps
given.
Not providing a value for steps
is deprecated. For backwards compatibility, not providing a value for steps creates a tensor with 100 elements. According to the official documentation, in a future PyTorch release, failing to provide a value for steps will throw a runtime error.
Unlike arange()
, linspace
can have a start
greater than end
since the common difference is automatically calculated.
Since steps
here is not a common difference, but the number of elements, it can only be a non-negative integer.
The rand() method
This method returns a tensor filled with random numbers from a uniform distribution on the interval 0 (inclusive) to 1 (exclusive). The shape is given by the size
argument. The size
argument can be given as a tuple or list or neither.
Passing an empty tuple or list creates a scalar tensor of zero dimension.
The randint() method
This method returns a tensor filled with random integers generated uniformly between low
(inclusive) and high
(exclusive). The shape is given by the size
argument. The default value for low
is 0.
When only one int
argument is passed, low
gets the value 0, by default, and high
gets the passed value.
The size
argument only takes a tuple or a list. An empty tuple or list creates a tensor with zero dimension.
The eye() method
This method returns a 2-D tensor with ones on the diagonal and zeros elsewhere. The number of rows is given by n
and columns is given by m
.
The default value for m
is the value of n
. When only n
is passed, it creates a tensor in the form of an identity matrix. An identity matrix has its diagonal elements as 1 and all others as 0.
The complex() method
This method returns a complex tensor with its real part equal to real
and its imaginary part equal to imag
. Both real
and imag
are tensors.
The data type of both the real
and imag
tensors should be either float
or double
.
Also, the size
of both tensors, real
and imag
, should be the same, since the corresponding elements of the two matrices form a complex number.
Conclusion
We've covered ten different ways to create tensors using PyTorch methods. You can go through the official documentation to know more about other PyTorch methods.
You can click here to go to the Jupyter notebook where you can play around with these methods.
If you want to learn more about PyTorch, check out this amazing course on freeCodeCamp's YouTube channel.
Stay safe!
Subscribe to my newsletter
Read articles from freeCodeCamp directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
freeCodeCamp
freeCodeCamp
Learn to code. Build projects. Earn certifications—All for free.