James
James

Reputation: 6008

Remove all columns matching a value in Numpy

Let's suppose I have a matrix with a number of binary values:

matrix([[1., 1., 1., 0., 0.],
    [0., 0., 1., 1., 1.],
    [0., 0., 0., 1., 0.],
    [0., 0., 0., 0., 1.]])

Using np.sum(M, 0) produces:

matrix([[1., 1., 2., 2., 2.]])

How do I remove all of the columns from the matrix that have only the value of 1?

Upvotes: 0

Views: 42

Answers (2)

Adhithyan Vijayakumar
Adhithyan Vijayakumar

Reputation: 174

You can convert the matrix to array. Then find the index with values 1 and then use those indexes to delete the values. For example you can do the following.

import numpy as np
M = np.matrix([[1, 1, 1, 0, 0], [0, 0, 1, 1, 1], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]])

M = np.sum(M, 0)

# conversion to array
array = np.squeeze(np.asarray(M))
index_of_elements_with_value_1 = [i for i, val in enumerate(array) if val == 1]
array = np.delete(array, index_of_elements_with_value_1)
print(array)

Upvotes: 0

user3483203
user3483203

Reputation: 51165

Easier to have an array here:

M = M.A

Now using simple slicing:

M[:, np.sum(M, 0)!=1]

array([[1., 0., 0.],
       [1., 1., 1.],
       [0., 1., 0.],
       [0., 0., 1.]])

Upvotes: 2

Related Questions