Home > Blockchain >  Convert a list of two numbers to indices for an array
Convert a list of two numbers to indices for an array

Time:11-28

Short version: Given a list with two elements [i, j], how do I get the i, j -element of a 2d array instead of the i, j rows: arr[[i,j]] to arr[i,j].

I've seen similar cases where *list has been used, but I don't entirely understand how that operator works.

Deeper context:

I have a function that returns a nested list, where each sub-list is a pair of indices to be used in an array:


grid = np.full((3,3), 1)

def path():
   ...
   return [[i_1, j_1], [i_2, j_2], ...]

for i in path():
   grid[path()[i]] = 0

But since path()[i] is a list, grid[path()[i]] == 0 sets two rows equal to zero, and not a single element. How do I prevent that?
While not stricly necessary, a faster solution would be preferable as this operation is to be done many times.

CodePudding user response:

The thing that is confusing you is the difference in mathematic notation and indexing 2D (or n-dimensional) lists in Python/programming languages.

If you have a 2D matrix in mathematics, called X, and let's say you'd want to access the element in the first row and first column, you'd write X(1, 1).

If you have a 2D array, it's elements are lists. So, if you want to access the 1st row of an array called X you'd do:

X[0] # 0 because indexation starts at 0

Keep in mind that the previous statement returns a new list. You can index this list as well. Since we need the first column, we do:

X[0][0] # element in 1st row and 1st column of matrix X

Thus the answer is you need to successively index the matrix, i.e. apply chain indexing.

As for your original question, here is my answer. Let's say a is the 2-element list which contains the indices i and j which you want to access in the 2D array. I'll denote the 2D array as b. Then you apply chain indexing, the first index is the first element of a and the second index is the second element of a:

a = [0, 0]  # list with 2 elements containing the indices
b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  # 2D array in which you want to access b[0][0]
i, j = a[0], a[1]
print(b[i][j])

Obviously you don't need to use variables i, j, I just did so for clarity:

print(b[a[0]][a[1]])

Both statements print out the element in the 1st row and 1st column of b:

1
  • Related