equal(), eq() and ne() in PyTorch
Tags: pytorch, equal, eq, ne
Published: 2024-04-14 22:03:28

[My post](https://dev.to/hyperkai/gt-lt-ge-and-le-in-pytorch-idd) explains [gt()](https://pytorch.org/docs/stable/generated/torch.gt.html), [lt()](https://pytorch.org/docs/stable/generated/torch.lt.html), [ge()](https://pytorch.org/docs/stable/generated/torch.ge.html) and [le()](https://pytorch.org/docs/stable/generated/torch.le.html).

[equal()](https://pytorch.org/docs/stable/generated/torch.equal.html) can check two of 0D or more D tensors have the same size and elements, getting the scalar of a boolean value as shown below:

*Memos:
- `equal()` can be used with [torch](https://pytorch.org/docs/stable/torch.html) or a tensor.
- The 1st argument with `torch` or using a tensor is `input`(Required-Type:`tensor` of `int`, `float`, `complex` or `bool`).
- The 2nd argument with `torch` or the 1st argument with a tensor is `other`(Required-Type:`tensor` of `int`, `float`, `complex` or `bool`).

```python
import torch

tensor1 = torch.tensor([5, 9, 3])
tensor2 = torch.tensor([5, 9, 3])

torch.equal(input=tensor1, other=tensor2)
tensor1.equal(other=tensor2)
torch.equal(input=tensor2, other=tensor1)
# True

tensor1 = torch.tensor([5., 9., 3.])
tensor2 = torch.tensor([5.+0.j, 9.+0.j, 3.+0.j])

torch.equal(input=tensor1, other=tensor2)
torch.equal(input=tensor2, other=tensor1)
# True

tensor1 = torch.tensor([1.+0.j, 0.+0.j, 1.+0.j])
tensor2 = torch.tensor([True, False, True])

torch.equal(input=tensor1, other=tensor2)
torch.equal(input=tensor2, other=tensor1)
# True

tensor1 = torch.tensor([5, 9, 3])
tensor2 = torch.tensor([7, 9, 3])

torch.equal(input=tensor1, other=tensor2)
torch.equal(input=tensor2, other=tensor1)
# False

tensor1 = torch.tensor([5, 9, 3])
tensor2 = torch.tensor([[5, 9, 3]])

torch.equal(input=tensor1, other=tensor2)
torch.equal(input=tensor2, other=tensor1)
# False
```

[eq()](https://pytorch.org/docs/stable/generated/torch.eq.html) can check the zero or more elements of the 1st 0D or more D tensor are equal to the zero or more elements of the 2nd 0D or more D tensor element-wise, getting the 0D or more D tensor of zero or more elements as shown below:

*Memos:
- `eq()` can be used with `torch` or a tensor.
- The 1st argument with `torch` or using a tensor is `input`(Required-Type:`tensor` of `int`, `float`, `complex` or `bool`).
- The 2nd argument with `torch` or the 1st argument with a tensor is `other`(Required-Type:`tensor` or `scalar` of `int`, `float`, `complex` or `bool`).
- There is `out` argument with `torch`(Optional-Type:`tensor`):
  *Memos:
  - `out=` must be used.
  - [My post](https://dev.to/hyperkai/set-out-with-out-argument-functions-pytorch-3ee) explains `out` argument.
- The result is the higher D tensor which has more elements.

```python
import torch

tensor1 = torch.tensor(5)
tensor2 = torch.tensor([[3, 5, 4],
                        [6, 3, 5]])
torch.eq(input=tensor1, other=tensor2)
tensor1.eq(other=tensor2)
torch.eq(input=tensor2, other=tensor1)
# tensor([[False, True, False],
#         [False, False, True]])

torch.eq(input=tensor1, other=3)
# tensor(False)

torch.eq(input=tensor2, other=3)
# tensor([[True, False, False],
#         [False, True, False]])

tensor1 = torch.tensor([5, 0, 3])
tensor2 = torch.tensor([[5, 5, 5],
                        [0, 0, 0],
                        [3, 3, 3]])
torch.eq(input=tensor1, other=tensor2)
torch.eq(input=tensor2, other=tensor1)
# tensor([[True, False, False],
#         [False, True, False], 
#         [False, False, True]])

torch.eq(input=tensor1, other=3)
# tensor([False, False, True])

torch.eq(input=tensor2, other=3)
# tensor([[False, False, False],
#         [False, False, False],
#         [True, True, True]])

tensor1 = torch.tensor([5., 0., 3.])
tensor2 = torch.tensor([[5., 5., 5.],
                        [0., 0., 0.],
                        [3., 3., 3.]])
torch.eq(input=tensor1, other=tensor2)
# tensor([[True, False, False],
#         [False, True, False], 
#         [False, False, True]])

torch.eq(input=tensor1, other=3.)
# tensor([False, False, True])

tensor1 = torch.tensor([5.+0.j, 0.+0.j, 3.+0.j])
tensor2 = torch.tensor([[5.+0.j, 5.+0.j, 5.+0.j],
                        [0.+0.j, 0.+0.j, 0.+0.j],
                        [3.+0.j, 3.+0.j, 3.+.0j]])
torch.eq(input=tensor1, other=tensor2)
# tensor([[True, False, False],
#         [False, True, False],
#         [False, False, True]])

torch.eq(input=tensor1, other=3.+0.j)
# tensor([False, False, True])

tensor1 = torch.tensor([True, False, True])
tensor2 = torch.tensor([[True, False, True],
                        [False, True, False],
                        [True, False, True]])
torch.eq(input=tensor1, other=tensor2)
# tensor([[True, True, True],
#         [False, False, False],
#         [True, True, True]])

torch.eq(input=tensor1, other=True)
# tensor([True, False, True])
```

[ne()](https://pytorch.org/docs/stable/generated/torch.ne.html) can check the zero or more elements of the 1st 0D or more D tensor are not equal to the zero or more elements of the 2nd 0D or more D tensor element-wise, getting the 0D or more D tensor of zero or more elements as shown below:

*Memos:
- `ne()` can be used with `torch` or a tensor.
- The 1st argument with `torch` or using a tensor is `input`(Required-Type:`tensor` of `int`, `float`, `complex` or `bool`).
- The 2nd argument with `torch` or the 1st argument with a tensor is `other`(Required-Type:`tensor` or `scalar` of `int`, `float`, `complex` or `bool`).
- There is `out` argument with `torch`(Optional-Type:`tensor`):
  *Memos:
  - `out=` must be used.
  - [My post](https://dev.to/hyperkai/set-out-with-out-argument-functions-pytorch-3ee) explains `out` argument.
- The result is the higher D tensor which has more elements.
- [not_equal()](https://pytorch.org/docs/stable/generated/torch.not_equal.html) is the alias of `ne()`.

```python
import torch

tensor1 = torch.tensor(5)
tensor2 = torch.tensor([[3, 5, 4],
                        [6, 3, 5]])
torch.ne(input=tensor1, other=tensor2)
tensor1.ne(other=tensor2)
torch.ne(input=tensor2, other=tensor1)
# tensor([[True, False, True],
#         [True, True, False]])

torch.ne(input=tensor1, other=3)
# tensor(True)

torch.ne(input=tensor2, other=3)
# tensor([[False, True, True],
#         [True, False, True]])

tensor1 = torch.tensor([5, 0, 3])
tensor2 = torch.tensor([[5, 5, 5],
                        [0, 0, 0],
                        [3, 3, 3]])
torch.ne(input=tensor1, other=tensor2)
torch.ne(input=tensor2, other=tensor1)
# tensor([[False, True, True],
#         [True, False, True],
#         [True, True, False]])

torch.ne(input=tensor1, other=3)
# tensor([True, True, False])

torch.ne(input=tensor2, other=3)
# tensor([[True, True, True],
#         [True, True, True],
#         [False, False, False]])

tensor1 = torch.tensor([5., 0., 3.])
tensor2 = torch.tensor([[5., 5., 5.],
                        [0., 0., 0.],
                        [3., 3., 3.]])
torch.ne(input=tensor1, other=tensor2)
# tensor([[False, True, True],
#         [True, False, True],
#         [True, True, False]])

torch.ne(input=tensor1, other=3.)
# tensor([True, True, False])

tensor1 = torch.tensor([5.+0.j, 0.+0.j, 3.+0.j])
tensor2 = torch.tensor([[5.+0.j, 5.+0.j, 5.+0.j],
                        [0.+0.j, 0.+0.j, 0.+0.j],
                        [3.+0.j, 3.+0.j, 3.+.0j]])
torch.ne(input=tensor1, other=tensor2)
# tensor([[False, True, True],
#         [True, False, True],
#         [True, True, False]])

torch.ne(input=tensor1, other=3.+0.j)
# tensor([True, True, False])

tensor1 = torch.tensor([True, False, True])
tensor2 = torch.tensor([[True, False, True],
                        [False, True, False],
                        [True, False, True]])
torch.ne(input=tensor1, other=tensor2)
# tensor([[False, False, False],
#         [True, True, True],
#         [False, False, False]])

torch.ne(input=tensor1, other=True)
# tensor([False, True, False])
```