2014-09-02 2 views
0

В названии написано все.Python Удалить столбцы из массива Numpy на основе некоторого состояния

Предположим, у меня есть Numpy массив, содержащий значения, подводящих до 1.

[0.5 0.3 0.1 0.05 0.03 0.01] 

И я хотел бы, чтобы удалить все значения массива, которые меньше, чем 0,05 и в то же время удалить соответствующий столбец , что приводит к массиву так:

[0.5 0.3 0.1 0.05] 

Есть, конечно, способы достижения этой цели. Но я не доволен кодом, который я создал . Я чувствую, что должен быть элегантный способ достичь этого с помощью Python.

Thx за помощь

Edit:

Спасибо за помощь. Я чувствую, что я уже на правильном пути. Я просто не знаю, как использовать Синтаксис еще. Не поймите вниз голосов, хотя. :(

+2

Было бы полезно, если бы вы включили способы, которые вы пробовали раньше. Возможно, даже указывая на то, в чем вы недовольны. –

+0

Ну, я уже давно занимаюсь поиском мусора. И я видел такие обозначения, как X [X> 1] = 5, что помогает заменять значения, но фактически удаляет столбцы, я не мог думать ни о чем, но делать цикл for в сочетании с if-предложением и использовать numpy.delete, который кажется довольно неуклюжим по сравнению со всем питоническим сахаром. – Nimi

ответ

2
a = [0.5 0.3 0.1 0.05 0.03 0.01] 
print a[a >= .05] 
+0

Thanx. Он работает при вводе в оболочку. Кажется, что-то неправильно с моим кодом. :/ – Nimi

+0

убедитесь, что это массив numpy. вы даже можете просто напечатать 'a> = .05', чтобы узнать, как это работает. – acushner

2

Похоже, у вас есть 2D массив (судя по фразе, «и в то же время удалить соответствующий столбец»).

Если вы создаете булев массив, idx что справедливо для столбцов, которые вы хотите сохранить, то вы можете выбрать только те столбцы, используя arr[:, idx]:

import numpy as np 
np.set_printoptions(formatter={'float': '{:0.2f}'.format}) 
np.random.seed(1) 

arr = np.random.random((3,4)) 
mask = (arr < 0.05) 
idx = mask.any(axis=0) 
result = arr[:, ~idx] 

print(arr) 
# [[0.42 0.72 0.00 0.30] 
# [0.15 0.09 0.19 0.35] 
# [0.40 0.54 0.42 0.69]] 

print(result) 
# [[0.42 0.72 0.30] 
# [0.15 0.09 0.35] 
# [0.40 0.54 0.69]] 
1

numpy.delete ваш друг

import numpy as np 

a = np.array([0.5 , 0.3 , 0.1 , 0.05, 0.03, 0.01]) 
a = np.delete(a,np.where(a < 0.05)) 

np.delete(a, 1) создаст копию a, а затем удалить a[1] из копии. a по-прежнему не затронут. Чтобы заставить изменения в a, сделать мы делаем a = np.delete(a,np.where(a < 0.05))

Также np.delete работы для высоких одномерных массивов, а также. Для данных с большими размерами вам нужно сделать больше работы по выбору правильного np.where