Je travaille avec une grande matrice (250x250x30 = 1 875 000 cellules), et j'aimerais trouver un moyen de définir un nombre arbitraire d'indicateurs pour chaque cellule de cette matrice, d'une manière simple et facile à utiliser. raisonnablement efficace dans l'espace.Drapeaux en Python
Mon plan d'origine était une liste de 250x250x30, où chaque élément était quelque chose comme: ["FLAG1","FLAG8","FLAG12"]
. Je l'ai ensuite changé pour stocker seulement des entiers à la place: [1,8,12]
. Ces entiers sont mappés en interne par les fonctions getter/setter aux chaînes de l'indicateur d'origine. Cela utilise seulement 250 Mo avec 8 drapeaux par point, ce qui est bien en termes de mémoire.
Ma question est la suivante: est-ce que je manque un autre moyen évident de structurer ce genre de données?
Merci à tous pour vos suggestions. J'ai fini par faire quelques suggestions en une, malheureusement je ne peux choisir qu'une réponse et je dois vivre avec les autres:
EDIT: erm le code initial que j'avais ici (en utilisant des ensembles comme élément de base d'un numpy 3d array) utilisé BEAUCOUP de mémoire. Cette nouvelle version utilise environ 500 Mo lorsqu'elle est remplie de 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
Combien de drapeaux avez-vous besoin de prendre en charge? – FogleBird
Je ne suis pas sûr, je ne serais pas confiant en disant quelque chose de plus précis que "plus de 5 et moins de 500". –