Удалить столбец массива с помощью индексации в Python - PullRequest
1 голос
/ 21 сентября 2011

Я пытаюсь удалить наблюдение в массиве с помощью индексации. Что у меня есть:

import numpy as np
test = np.ones([1, 1001])

То, что я хочу сделать, это вернуть массив, такой же, как test, но удалив 5-е наблюдение (т. Е. Test [0: 4 AND 6:]). Есть ли простой способ сделать это?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Numpy имеет delete, см. http://docs.scipy.org/doc/numpy/reference/generated/numpy.delete.html

В вашем случае numpy.delete(test, 5, axis=1) должен это сделать. НО : элементы не удаляются на месте, функция возвращает новый массив без 5-го столбца.

2 голосов
/ 21 сентября 2011

Вы можете использовать нарезку и hstack:

In [18]: test_ex5 = np.hstack((test[:,:5],test[:,6:]))

In [19]: test.shape
Out[19]: (1, 1001)

In [20]: test_ex5.shape
Out[20]: (1, 1000)

Обратите внимание, что индексирование отключено на один: test[0:4 AND 6:] удалит два элемента вместо одного.

1 голос
/ 21 сентября 2011

Альтернативой является использование замаскированных массивов , которые, в зависимости от вашего приложения, могут повысить скорость, поскольку вам не нужно удалять записи и / или создавать новые ndarrays, которые, AFAIK, довольно дорогиеоперации в numpy.

Пример:

import numpy as np

test = np.ones([1, 1001])
mask = np.zeros((1, 1001))
mask[:,4] = 1
result = np.ma.masked_array(test, mask)

Пятый элемент теперь маскируется, и на result могут выполняться различные операции, например, методы sum() или mean(),Больше информации в ссылке, которую я дал вам.Если вы хотите получить настоящий ndarray, просто позвоните result.compressed().Однако это потребует дорогостоящей работы по выделению новой памяти и копированию в нее данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...