0

I'm trying to access each item in a numpy 2D array.

I'm used to something like this in Python [[...], [...], [...]]

for row in data:
    for col in data:
       print(data[row][col])

but now, I have a data_array = np.array(features)

How can I iterate through it the same way?

4
  • We need a lot more detail in order to help. Commented Nov 17, 2016 at 20:02
  • 1
    Isn't this covered in the basic numpy documentation? Commented Nov 17, 2016 at 20:28
  • You can iterate through it in the same way by iterating through it in the same way. Try it and see! However, iterating through a 2D array completely defeats the point of using numpy, i.e. efficient array operations. Read this doc page, for instance. Commented Nov 17, 2016 at 21:43
  • Note that your current syntax is not correct, even for iterating through nested lists. You should rather be using for row in data: for elem in row: print(elem). This would work for both nested lists and 2D arrays Commented Nov 17, 2016 at 21:47

3 Answers 3

9

Try np.ndenumerate:

>>> a =numpy.array([[1,2],[3,4]])
>>> for (i,j), value in np.ndenumerate(a):
...  print(i, j, value)
... 
0 0 1
0 1 2 
1 0 3
1 1 4
Sign up to request clarification or add additional context in comments.

Comments

5

Make a small 2d array, and a nested list from it:

In [241]: A=np.arange(6).reshape(2,3)
In [242]: alist= A.tolist()
In [243]: alist
Out[243]: [[0, 1, 2], [3, 4, 5]]

One way of iterating on the list:

In [244]: for row in alist:
     ...:     for item in row:
     ...:         print(item)
     ...:         
0
1
2
3
4
5

works just same for the array

In [245]: for row in A:
     ...:     for item in row:
     ...:         print(item)
     ...:         
0
1
2
3
4
5

Now neither is good if you want to modify elements. But for crude iteration over all elements this works.

WIth the array I can easily treat it was a 1d

In [246]: [i for i in A.flat]
Out[246]: [0, 1, 2, 3, 4, 5]

I could also iterate with nested indices

In [247]: [A[i,j] for i in range(A.shape[0]) for j in range(A.shape[1])]
Out[247]: [0, 1, 2, 3, 4, 5]

In general it is better to work with arrays without iteration. I give these iteration examples to clearup some confusion.

Comments

0

If you want to access an item in a numpy 2D array features, you can use features[row_index, column_index]. If you wanted to iterate through a numpy array, you could just modify your script to

for row in data:

    for col in data:

       print(data[row, col])

3 Comments

No. if you iterate like this, row is a 1d array. You can use that as an index for data. And the 2nd iteration is just the same. You probably had for item in row: in mind.
What you need is for row in data.shape[0] and for col in data.shape[1], or alternatively, for row in data: for col in row: print(col).
Yeah you're right, I forgot to change the for loop to use the numbers of rows and columns like Praveen did.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.