Я работаю с большой матрицей (250x250x30 = 1,875,000 ячеек), и мне бы хотелось установить произвольное количество флагов для каждой ячейки в этой матрице, в некотором роде простую в использовании и разумное пространство эффективно.Флаги в Python
Мой первоначальный план был массивом списка 250x250x30, где каждый элемент был примерно таким: ["FLAG1","FLAG8","FLAG12"]
. Затем я заменил его на хранение только целых чисел: [1,8,12]
. Эти целые числа отображаются внутренне с помощью функций getter/setter в исходные строки флага. Это использует только 250 МБ с 8 флагами на точку, что отлично с точки зрения памяти.
Мой вопрос: я пропустил еще один очевидный способ структурирования такого рода данных?
Спасибо всем за ваши предложения. Я закончил тем, что вложил несколько предложений в один, к сожалению, я могу выбрать только один ответ, и мне нужно жить с продолжением других:
EDIT: erm начальный код, который у меня был здесь (с использованием наборов в качестве базового элемента 3d numpy массив) использовалось много памяти. Эта новая версия использует около 500 МБ при заполнении randint(0,2**1000)
.
import numpy
FLAG1=2**0
FLAG2=2**1
FLAG3=2**2
FLAG4=2**3
(x,y,z) = (250,250,30)
array = numpy.zeros((x,y,z), dtype=object)
def setFlag(location,flag):
array[location] |= flag
def unsetFlag(location,flag):
array[location] &= ~flag
Сколько флагов вам нужно поддержать? – FogleBird
Я не уверен, я бы не стал уверенно говорить что-то более точное, чем «более 5 и менее 500». –