Ошибка памяти (MemoryError) при создании логического массива NumPy (Python) - PullRequest
2 голосов
/ 15 сентября 2010

Я использую NumPy с Python 2.6.2.Я пытаюсь создать небольшой (длина 3) простой логический массив.Следующее дает мне MemoryError, которая, я думаю, не должна.

import numpy as np
cond = np.fromiter((x in [2] for x in [0, 1, 2]), dtype = np.bool)

Ошибка, которую он мне дает:

MemoryError: не может выделить память массива

следующий метод получения списка (в отличие от ndarray) работает нормально (без использования numpy):

cond = list((x in [2] for x in [0, 1, 2]))

Что-то не так в коде Numpy?Я чувствую, что это должно сработать.

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Я могу воспроизвести проблему с numpy 1.1 (но не с чем-то более новым).Очевидно, что лучше всего перейти на более свежую версию numpy.

Тем не менее, это похоже на использование np.bool в качестве dtype, когда count=-1 (по умолчанию: чтение всех элементов в итераторе вместо номера набора).

AБыстрый обходной путь - просто создать его как массив int, а затем преобразовать его в логический массив:

cond = np.fromiter((x in [2] for x in [0, 1, 2]), dtype=np.int).astype(np.bool)

В качестве альтернативы можно преобразовать его в список, а затем установить count на длинуlist (или просто используйте np.asarray в списке):

items = list((x in [2] for x in [0, 1, 2]))
cond = np.fromiter(items, dtype=np.bool, count=len(items))

Очевидно, что оба они неоптимальны, но если вы не можете перейти на более свежую версию numpy, они будут работать.

1 голос
/ 15 сентября 2010

Вы не должны получать никаких ошибок.

С Python 2.6.5 или Python 2.7 и Numpy 1.5.0 я не получаю никаких ошибок.Поэтому я считаю, что обновление вашего программного обеспечения вполне может решить проблему, с которой вы столкнулись.

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