xtlc
xtlc

Reputation: 1368

Applying a mask to an multidimensional array

I want to do this in a proper way:

data = np.array(data)
data =[
[1, 1, 2, 1],
[0, 1, 3, 2],
[0, 2, 3, 2],
[2, 4, 3, 1],
[0, 2, 1, 4],
[3, 1, 4, 1]]

this should become (delete the lines that start with 0):

[1, 1, 2, 1]
[2, 4, 3, 1]
[3, 1, 4, 1]

So far I did it like this:

lines = []
for i in range(0, len(data[0])):
    if data[0,i] != 0:
        lines.append(data[:,i])
lines = np.array(lines)

Then I found this fine method:

mask = 1 <= data[0,:]

and now I want to apply that mask to that array. This Mask reads: [True, False, False, True, False, True]. How do I do that?

Upvotes: 1

Views: 584

Answers (3)

Padraic Cunningham
Padraic Cunningham

Reputation: 180391

I presume you have a numpy array based on the data[0,:] and data[0,i] you have in your question and you mean data[:, 0] :

import numpy as np

data = np.array([
    [1, 1, 2, 1],
    [0, 1, 3, 2],
    [0, 2, 3, 2],
    [2, 4, 3, 1],
    [0, 2, 1, 4],
    [3, 1, 4, 1]])

data = data[data[:,0] != 0]
print(data)

Output:

[[1 1 2 1]
 [2 4 3 1]
 [3 1 4 1]]

data[0,:] is the first row [1 1 2 1] not the first column

Upvotes: 1

Andrey
Andrey

Reputation: 60055

Why not just:

[ar for ar in data if ar[0] != 0]

This assumes that arrays are not empty.

Upvotes: 2

Ajay
Ajay

Reputation: 5347

Using List comprehension

In [56]: [elem for elem in data if elem[0] !=0]
Out[56]: [[1, 1, 2, 1], [2, 4, 3, 1], [3, 1, 4, 1]]

Upvotes: 0

Related Questions