Printing specific rows of an array in Python

Question:

I am trying specific rows of the array A based on the list J. For instance, it should print 1st and 4th rows of A since J=[[1,4]] and append as shown in the expected output. I also present the current output.

import numpy as np

A=np.array([[1,2,3,4,5],
            [6,7,8,9,10],
            [11,12,13,14,15],
            [16,17,18,19,20],
            [21,22,23,24,25]])


J=[[1, 4]]

for i in J[0]:
     A=A[i]
     print([A])

The current output is

[array([ 6,  7,  8,  9, 10])]
[array(10)]

The expected output is

[array([[ 6,  7,  8,  9, 10],
        [21,22,23,24,25]])]
Asked By: AEinstein

||

Answers:

The issue is that you are re-writing your A array within your loop with A=A[i], so when the code tries to find A[i] the second time, it will be filtering on the new A which is the row from the previous loop (hence the output of 10). Pick a different letter to use here like this:

for i in J[0]:
    B = A[i]
    print([B])

Output:

[array([ 6,  7,  8,  9, 10])]
[array([21, 22, 23, 24, 25])]

To get your exact output of a list containing an array containing nested lists, you can create an empty list C, and add the list of B each loop then turn that into an array in a list at the end rather than printing each step, like this:

C = []
for i in J[0]:
    B=A[i]
    C += [list(B)]
C = [np.array(C)]

Now C is:

[array([[ 6,  7,  8,  9, 10],
       [21, 22, 23, 24, 25]])]
Answered By: Emi OB

Can do in one line:

np.array([list(A[i]) for i in J[0]])

#output
array([[ 6,  7,  8,  9, 10],
       [21, 22, 23, 24, 25]])

if you want to append to a list then:

l=[]
l.append(np.array([list(A[i]) for i in J[0]]))

#output
[array([[ 6,  7,  8,  9, 10],
       [21, 22, 23, 24, 25]])]
Answered By: Talha Tayyab

Define an empty array variable and append desired raw arrays inside the loop and after finishing print out this array.

B = []
for i in J[0]:
    B.append(A[i])
print([B])

O/P will be:

[[array([ 6,  7,  8,  9, 10]), array([21, 22, 23, 24, 25])]]

Update You can use filter numpy by indices

J = [[1, 4]]
B = A[J[0]]
print([B])

O/P will be:

[array([[ 6,  7,  8,  9, 10],
       [21, 22, 23, 24, 25]])]
Answered By: Khaled Lela
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.