2014-11-26 3 views
0

Кажется, что аргумент оси в numpy.delete() обратный от всех аргументов другой оси как в numpy, так и в pandas. Как правило, ось = 0 относится к столбцам, а ось = 1 относится к строкам. Например:Обратные оси в numpy.delete

import numpy as np 
mat=np.array([[1,2], [3,4]]) 
# sum columns 
np.sum(mat, axis=0) 
# sum rows 
np.sum(mat, axis=1) 
# min of columns 
np.min(mat, axis=0) 

Это все работает, как ожидалось. Но если я использую numpy.delete, мне нужно переключиться:

# delete 1st row 
np.delete(mat, 0, axis=0) 
# delete 1st column 
np.delete(mat, 0, axis=1) 

Кто-нибудь еще заметил это? Я сошел с ума или это по дизайну?

ответ

1

Это по дизайну. Вы указываете ось, из которой следует удалить указанный индекс (или индексы). Например, предположим, что мы имеем z следующим образом:

In [62]: z 
Out[62]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14]]) 

Вы выбираете различные строки z путем изменения первого показателя z (т.е. путем выбора индексов вдоль оси 0):

In [63]: z[0, :] 
Out[63]: array([0, 1, 2, 3, 4]) 

In [64]: z[1, :] 
Out[64]: array([5, 6, 7, 8, 9]) 

Так что делает ощущение, что вы также выбрать axis=0 удалить, скажем, строку с индексом 1:

In [65]: np.delete(z, 1, axis=0) 
Out[65]: 
array([[ 0, 1, 2, 3, 4], 
     [10, 11, 12, 13, 14]]) 

Сими Вы используете ось 1 (т.е. второй индекс), чтобы получить доступ к различным столбцов:

In [66]: z[:, 0] 
Out[66]: array([ 0, 5, 10]) 

In [67]: z[:, 3] 
Out[67]: array([ 3, 8, 13]) 

и поэтому можно использовать axis=1 удалить столбцы:

In [68]: np.delete(z, 3, axis=1) 
Out[68]: 
array([[ 0, 1, 2, 4], 
     [ 5, 6, 7, 9], 
     [10, 11, 12, 14]]) 

Не забывайте, что это обобщается на п-мерных массивов. Например, если у вас есть трехмерный массив a, и вы хотите удалить двумерный срез a[:, :, k], вы бы использовали np.delete(a, k, axis=2).

+0

Итак, почему ось перевернута во всех других командах (т. Е. Суммирование по строкам равно оси = 1). Есть ли для этого соглашение? – Nate

+0

Это согласуется: для 2-го массива «суммирование по строкам» фактически «суммируется вдоль оси 1». –

+0

Ох. Правильно. Понял. Я не думал об этом. Теперь это намного больше. – Nate

Смежные вопросы