Как «удалить» массив numpy из списка массивов numpy? - PullRequest
11 голосов
/ 01 июля 2010

Если у меня есть список пустых массивов, то при использовании метода remove возвращается значение ошибки.

Например:

import numpy as np

l = [np.array([1,1,1]),np.array([2,2,2]),np.array([3,3,3])]

l.remove(np.array([2,2,2]))

Дало бы

ValueError: Значение истинности массива с более чем одним элементом неоднозначно.Используйте a.any () или a.all ()

Кажется, я не могу заставить работать all (), это просто невозможно?

Ответы [ 2 ]

11 голосов
/ 01 июля 2010

Проблема здесь в том, что при сравнении двух числовых массивов с ==, как в методах remove () и index (), возвращается массив пустых значений (сравнения по элементам), который интерпретируется как неоднозначный. Хороший способ сравнить два numpy-массива на равенство - использовать функцию array_equal () numpy.

Поскольку метод списков remove () не имеет ключевого аргумента (как у sort ()), я думаю, что для этого вам нужно создать собственную функцию. Вот что я сделал:

def removearray(L,arr):
    ind = 0
    size = len(L)
    while ind != size and not np.array_equal(L[ind],arr):
        ind += 1
    if ind != size:
        L.pop(ind)
    else:
        raise ValueError('array not found in list.')

Если вам нужно, чтобы это было быстрее, вы можете Cython-ize.

4 голосов
/ 01 июля 2010

Вот, пожалуйста:

list.pop(1)

Обновление:

list.pop(list.index(element))

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

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