2017-01-04 4 views
0

У меня есть список целых чисел, которые представляют позиции в матрице (centre). Например,Удалить строки из матрицы numpy

centre = [2, 50, 100, 89] 

У меня также есть два Numpy матрицы, X и Y. Мне нужно удалить все строки из матрицы, если номер находится в centre. Я могу это сделать:

for each in centre: 
    x = numpy.delete(x, (each), axis=0) 

Однако цифры будут отсутствовать, так как все индексы будут отсутствовать. Итак, как я могу это сделать?

ответ

2

Просто сделайте delete в один вызов:

In [266]: B 
Out[266]: 
array([[ 2, 4, 6], 
     [ 8, 10, 12], 
     [14, 16, 18], 
     [20, 22, 24]]) 
In [267]: B1=np.delete(B,[1,3],axis=0) 
In [268]: B1 
Out[268]: 
array([[ 2, 4, 6], 
     [14, 16, 18]]) 

Вы вопрос немного запутанным. Я предполагаю, что вы хотите удалить строки по номеру индекса, а не по какому-либо контенту (не как список find).

Однако, если вы должны выполнить итерацию (как и в случае с списком), сделайте это в обратном порядке - таким образом индексирование не будет испорчено. Возможно, вам придется сначала сортировать индексы (np.delete не требует этого).

In [269]: B1=B.copy() 
In [270]: for i in [1,3][::-1]: 
    ...:  B1=np.delete(B1,i,axis=0) 

Пример из списка, который должен быть итеративным:

In [276]: B1=list(range(10)) 
In [277]: for i in [1,3,5,7][::-1]: 
    ...:  del B1[i] 
In [278]: B1 
Out[278]: [0, 2, 4, 6, 8, 9] 

=============

С входом списка, как это, np.delete делает эквивалент:

In [285]: mask=np.ones((4,),bool) 
In [286]: mask[[1,3]]=False 
In [287]: mask 
Out[287]: array([ True, False, True, False], dtype=bool) 
In [288]: B[mask,:] 
Out[288]: 
array([[ 2, 4, 6], 
     [14, 16, 18]]) 
Смежные вопросы