DEV Community

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

Posted on • Edited on

prod and cartesian_prod in PyTorch

Buy Me a Coffee

*Memos:

prod() can get the 0D or more D tensor of zero 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-Default:None-Type:dtype): *Memos:
    • If it's None, it's inferred from input or a tensor.
    • dtype= must be used.
    • My post explains dtype argument.
  • The empty 1D or more D input tensor or tensor without dim or with the deepest dim gets a one.
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.) 
Enter fullscreen mode Exit fullscreen mode

cartesian_prod() can get the 1D or 2D tensor of zero or more cartesian product's elements from the one or more 1D tensors of zero or more elements 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]]) 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)