2010-09-22 1 views
1

Je ne suis pas sûr si ma question post a beaucoup de sens; Cependant, je construis un tableau d'entrée pour une classe/fonction qui prend beaucoup de données entrées par l'utilisateur et qui génère un tableau numpy.Organisation et construction d'un tableau numpy pour une entrée d'équation dynamique

# I'm trying to build an input array that should include following information: 
''' 
* zone_id - id from db - int 
* model size - int 
    * type of analysis - one of the following: 
    * type 1 - int or string 
    * type 2 - int or string 
    * type 3 - int or string 
    * model purposes: 
    * default: ONE, TWO, THREE #this is just a title of the purpose 
    * Custom: default + others (anywhere from 0 to 15 purposes) 
    * Modeling step 1: some socio economic factors #produces results 1 
    * Modeling step 2: 
    * Default: equation coefficients for retail/non retail 
    * Custom: equation coefficients for each extra activities as defined by 
     the user 
    * produces results 2 

Example array: 
    def_array = (zone_id, model_size, analysis_type, 
       model_purpose[], 
       socio_economics[], 
       socio_coefficients[]) 
''' 
# Numerical example: 
    my_arr = [np.array([ 10001, 1, 2, 
        [ 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE' ], 
        [ {'retail':500, 'non_retail':300, 'school':300', 'other':900} ], 
        [ {'retail':500, 'non_retail':300, 'school':300', 'other':900} ], 
        [ {'ONE':{'retail':.5, 'non_retail':1.7, 'school':.4', 'other':4.7}, 
         {'TWO':{'retail':.2, 'non_retail':2.5, 'school':.5', 'other':4.3}, 
         {'THREE':{'retail':.3, 'non_retail':2.3, 'school':.6', 'other':2.2}, 
         {'FOUR':{'retail':.4, 'non_retail':1.1, 'school':.7', 'other':1.0}, 
         {'FIVE':{'retail':7, 'non_retail':2, 'school':3', 'other':1} ] ]) 

# this array will be inserted into 3 functions and together should return the following array: 
arr_results = [np.array([ 10001, one_1, TWO_1, THREE_1, FOUR_1, FIVE_1, ONE_2, TWO_2, THREE_2, FOUR_2, FIVE_2], 
         [10002, .... ,] ]) 
  • Quels sont/est ma meilleure option (s) dans la définition du tableau d'entrée (s)?
+0

Êtes-vous sûr que vous pouvez construire un tel tableau numpy compliqué? Les tableaux Numpy sont excellents pour les grandes formes régulières de données du même type. Peut-être définir une classe avec des attributs spécifiques (certains d'entre eux peuvent être des tableaux numpy). – eumiro

+0

@eumiro - cela fonctionne aussi, n'hésitez pas à poster une réponse expliquant que s'il vous plaît :) – dassouki

+0

katrielalex a une solution lightweighter pour vous – eumiro

Répondre

3

Les tableaux numériques sont un mauvais type de données ici: ils sont conçus pour des manipulations numériques de grandes quantités de données similaires (par exemple de grandes matrices). On dirait que vous pouvez simplement utiliser un dict:

options = { 
    "zone_id": 10001, 
    "model_size": 1, 
    "analysis_type": 2, 
    "model_purposes": [ "ONE", ... ] 
    ... 
} 

Vous pouvez ensuite transmettre ce message à une fonction, soit comme le dictionnaire ou en déballer dans les arguments de noms à l'aide **:

def do_stuff(zone_id=10001, model_size=1, ...): 
    ... 

do_stuff(**options) 

Si vous voulez un type de données d'options plus compliqué (par exemple, si certaines options doivent être calculées à la volée ou dépendent des autres), vous pouvez utiliser une classe spécialisée Options (mais attention, c'est certainement trop);

class Options: 
    def __init__(self): 
     # set some default values 
     self.zone_id = 10001 

    def populate_values(self): 
     # maybe handle some user input? 
     self.name = input("name: ") 

    # use a property to calculate model_size on the fly 
    @property 
    def model_size(self): 
     return 2-1 

puis

options = Options() 
options.populate_values() 
print(options.model_size)