Sumsuddin Shojib
Sumsuddin Shojib

Reputation: 3743

Python numpy indexing confusion

I'm new in python, I was looking into a code which is similar to as follows,

import numpy as np

a = np.ones([1,1,5,5], dtype='int64')
b = np.ones([11], dtype='float64')
x = b[a]
print (x.shape)
# (1, 1, 5, 5)

I looked into the python numpy documentation I didn't find anything related to such case. I'm not sure what's going on here and I don't know where to look.

Edit The actual code

def gausslabel(length=180, stride=2):
    gaussian_pdf = signal.gaussian(length+1, 3)
    label = np.reshape(np.arange(stride/2, length, stride), [1,1,-1,1])
    y = np.reshape(np.arange(stride/2, length, stride), [1,1,1,-1])
    delta = np.array(np.abs(label - y), dtype=int)
    delta = np.minimum(delta, length-delta)+length/2
    return gaussian_pdf[delta]

Upvotes: 0

Views: 69

Answers (1)

Dan
Dan

Reputation: 45752

I guess that this code is trying to demonstrate that if you index an array with an array, the result is an array with the same shape as the indexing array (in this case a) and not the indexed array (i.e. b)

But it's confusing because b is full of 1s. Rather try this with a b full of different numbers:

>> a = np.ones([1,1,5,5], dtype='int64')
>> b = np.arange(11) + 3
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13])
>>> b[a]
array([[[[4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4],
         [4, 4, 4, 4, 4]]]])

because a is an array of 1s, the only element of b that is indexed is b[1] which equals 4. The shape of the result though is the shape of a, the array used as the index.

Upvotes: 1

Related Questions