prod() and cartesian_prod() in PyTorch

RMAG news

Buy Me a Coffee

*My post explains sum() and nansum().

prod() can get the 0D or more D tensor of one or more product’s elements from the 0D or more D tensor of zero or more elements as shown below:

*Memos:

prod() can be used with torch or a tensor.
The 1st argument(input) with torch or using a tensor(Required-Type:tensor of int, float, complex or bool).
The 2nd argument with torch or the 1st argument with a tensor is dim(Optional-Type:int).
The 3rd argument with torch or the 2nd argument with a tensor is keepdim(Optional-Default:False-Type:bool):
*Memos:

keepdim= must be used with dim=.

My post explains keepdim argument.

There is dtype argument with torch(Optional-Type:dtype):
*Memos:

If dtype is not given, it is inferred from input or a tensor.

dtype= must be used.

My post explains dtype argument.

An empty tensor gets 1..

import torch

my_tensor = torch.tensor([1, 2, 3, 4])

torch.prod(input=my_tensor)
my_tensor.prod()
torch.prod(input=my_tensor, dim=0)
torch.prod(input=my_tensor, dim=-1)
# tensor(24)

my_tensor = torch.tensor([[1, 2, 3, 4],
[5, 6, 7, 8]])
torch.prod(input=my_tensor)
# tensor(40320)

torch.prod(input=my_tensor, dim=0)
torch.prod(input=my_tensor, dim=-2)
# tensor([5, 12, 21, 32])

torch.prod(input=my_tensor, dim=1)
torch.prod(input=my_tensor, dim=-1)
# tensor([24, 1680])

my_tensor = torch.tensor([[1., 2., 3., 4.],
[5., 6., 7., 8.]])
torch.prod(input=my_tensor)
# tensor(40320.)

my_tensor = torch.tensor([[1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j],
[5.+0.j, 6.+0.j, 7.+0.j, 8.+0.j]])
torch.prod(input=my_tensor)
# tensor(40320.+0.j)

my_tensor = torch.tensor([[True, False, True, False],
[False, True, False, True]])
torch.prod(input=my_tensor)
# tensor(0)

my_tensor = torch.tensor([])

torch.prod(input=my_tensor)
# tensor(1.)

cartesian_prod() can get the 1D or 2D tensor of zero or more cartesian product’s elements from the one or more 1D tensors as shown below:

*Memos:

cartesian_prod() can be used with torch but not with a tensor.
The 1st or more arguments with torch are *tensors(Required at least one tensor-Type:tensor of int, float, complex or bool).
*Memos:

Don’t use any keyword like *tensors= or tensors=.
Tensors must be the same type.

import torch

my_tensor = torch.tensor([1, 2, 3, 4])

torch.cartesian_prod(my_tensor)
# tensor([1, 2, 3, 4])

my_tensor = torch.tensor([1., 2., 3., 4.])

torch.cartesian_prod(my_tensor)
# tensor([1., 2., 3., 4.])

my_tensor = torch.tensor([1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])

torch.cartesian_prod(my_tensor)
# tensor([1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])

my_tensor = torch.tensor([True, False, True, False])

torch.cartesian_prod(my_tensor)
# tensor([True, False, True, False])

tensor1 = torch.tensor([1, 2, 3, 4])
tensor2 = torch.tensor([5, 6])

torch.cartesian_prod(tensor1, tensor2)
# tensor([[1, 5],
# [1, 6],
# [2, 5],
# [2, 6],
# [3, 5],
# [3, 6],
# [4, 5],
# [4, 6]])

tensor1 = torch.tensor([1, 2, 3, 4])
tensor2 = torch.tensor([5, 6])
tensor3 = torch.tensor([7, 8, 9])

torch.cartesian_prod(tensor1, tensor2, tensor3)
# tensor([[1, 5, 7],
# [1, 5, 8],
# [1, 5, 9],
# [1, 6, 7],
# [1, 6, 8],
# [1, 6, 9],
# [2, 5, 7],
# [2, 5, 8],
# [2, 5, 9],
# [2, 6, 7],
# [2, 6, 8],
# [2, 6, 9],
# [3, 5, 7],
# [3, 5, 8],
# [3, 5, 9],
# [3, 6, 7],
# [3, 6, 8],
# [3, 6, 9],
# [4, 5, 7],
# [4, 5, 8],
# [4, 5, 9],
# [4, 6, 7],
# [4, 6, 8],
# [4, 6, 9]])

Please follow and like us:
Pin Share