Search code examples
pythonmatrixpytorchtensorargmax

Why does dim=1 return row indices in torch.argmax?


I am working on argmax function of PyTorch which is defined as:

torch.argmax(input, dim=None, keepdim=False)

Consider an example

a = torch.randn(4, 4)
print(a)
print(torch.argmax(a, dim=1))

Here when I use dim=1 instead of searching column vectors, the function searches for row vectors as shown below.

print(a) :   
tensor([[-1.7739,  0.8073,  0.0472, -0.4084],  
        [ 0.6378,  0.6575, -1.2970, -0.0625],  
        [ 1.7970, -1.3463,  0.9011, -0.8704],  
        [ 1.5639,  0.7123,  0.0385,  1.8410]])  

print(torch.argmax(a, dim=1))  
tensor([1, 1, 0, 3])

As far as my assumption goes dim = 0 represents rows and dim =1 represent columns.


Solution

  • It's time to correctly understand how the axis or dim argument work in PyTorch:

    tensor dimension


    The following example should make sense once you comprehend the above picture:

        |
        v
      dim-0  ---> -----> dim-1 ------> -----> --------> dim-1
        |   [[-1.7739,  0.8073,  0.0472, -0.4084],
        v    [ 0.6378,  0.6575, -1.2970, -0.0625],
        |    [ 1.7970, -1.3463,  0.9011, -0.8704],
        v    [ 1.5639,  0.7123,  0.0385,  1.8410]]
        |
        v
    
    # argmax (indices where max values are present) along dimension-1
    In [215]: torch.argmax(a, dim=1)
    Out[215]: tensor([1, 1, 0, 3])
    

    Note: dim (short for 'dimension') is the torch equivalent of 'axis' in NumPy.