コード例 #1
0
def traitementMatrice(dicRealP1, dicMatrice, dicNoProduct):
    codeP1 = dicRealP1.keys()
    codeP1.sort()
    mVector = []
    for keyP1 in codeP1:  #key = country,year
        nbrEleP1 = len(dicRealP1[keyP1]['P1'])
        matriceA = zeros((nbrEleP1, nbrEleP1), dtype=float)
        ligne = 0
        col = 0
        dicRealP1[keyP1]['P1'].sort()
        dicRealP1[keyP1]['EMP'].sort()
        colP1 = dicRealP1[keyP1]['P1']
        colToBeP1 = dicRealP1[keyP1]['EMP']
        '''
		fileOutput.write(keyP1+'\n')
		code   = 'EMP,'
		fileOutput.write(libMatrix.ligneProc(code,colToBeP1)+'\n')
		'''
        if (len(colP1) != len(colToBeP1)):
            fileLog.write('nbr product P1 =' + str(len(colP1)) +
                          ' nbr product EMP =' + str(len(colToBeP1)) +
                          ' for ' + str(keyP1) + '\n')
        colEmp = libMatrix.vectorCol(
            colP1,
            colToBeP1)  #la fonction fait un vecteur avec TOUTES les colonnes
        colP1.sort()
        colEmp.sort()
        vectorP1 = dicRealP1[keyP1]['P1']
        vectorZero = libMatrix.fonctionVectorZero(vectorP1)
        '''
		code   = 'nama,'
		fileOutput.write(libMatrix.ligneProc(code,colEmp)+'\n')
		code   = 'P1,'
		fileOutput.write(libMatrix.ligneProc(code,colP1)+'\n')
		'''
        mVector = map(libMatrix.divide, colEmp, colP1)
        for productLst in dicRealP1[keyP1][
                'P1']:  #chaque ligne est une liste avec le code produit et la valeur
            productLst = productLst.split('#')
            productP1 = productLst[0]
            valueP1 = float(productLst[1])
            keyMatriceP1 = keyP1 + '#' + productP1
            ligne = 0
            if dicNoProduct.has_key(keyMatriceP1):
                continue
            else:
                try:  # la ligne de la matrice est dans P1
                    dicMatrice[keyMatriceP1].sort()
                    vectorMatrice = dicMatrice[keyMatriceP1]
                except:  #la ligne est dans P1 mais PAS dans la matrice, on met un vector avec les valeurs 0 ex: CPA_T pour EE
                    vectorMatrice = vectorZero
                    fileLog.write(
                        'le produit ' + productP1 +
                        ' existe dans P1 mais pas dans la MATRICE = ' + keyP1 +
                        '\n')
                vectorP1 = dicRealP1[keyP1]['P1']
                #evite les decalages entre P1 et la Matrice, on peux avoir une colonne dans P1 et pas dans la matrice
                #dans ce cas on ajoute une colonne avec des zero
                ligneAtraiter = libMatrix.vectorAtraiter(
                    vectorMatrice, vectorP1)
                ligneAtraiter.sort()
                for ligneMatrice in ligneAtraiter:  #ATTENTION CHAQUE LIGNE CORRESPOND AUX ELEMENTS D'UNE ligne
                    ligneMatrice = ligneMatrice.split('#')
                    product = ligneMatrice[0]
                    value = float(ligneMatrice[1])
                    keyNoProduct = keyP1 + "#" + product
                    if dicNoProduct.has_key(keyNoProduct):
                        continue
                    #on calcul la matrice A qui est celle des coeficient technique
                    else:
                        if (
                                ligne < nbrEleP1
                        ):  #le nombre element dans la ligne doit etre le meme que celui de P1
                            matriceA[ligne, col] = value / valueP1
                            ligne += 1
                        else:
                            fileLog.write(
                                'Probleme matrice: nbrLigne > nbrEleP1 ' +
                                keyMatriceP1 + ',Col=' + str(col) + ',ligne=' +
                                str(ligne) + ',maxEle=' + str(nbrEleP1) +
                                ',nbr produits dans Matrice Produit(nbr Ligne)='
                                + str(len(dicMatrice[keyMatriceP1])) + '\n')
                if (col < nbrEleP1):
                    col += 1
                else:
                    fileLog.write('Probleme matrice: nbrColonne > nbrEleP1 ' +
                                  keyMatrice + ',Col=' + str(col) + ',ligne=' +
                                  str(ligne) + ',maxEle=' + str(nbrEleP1) +
                                  '\n')
        #print keyP1, 'len(matriceA)=',len(matriceA), ' len( dicRealP1)=' ,len(dicRealP1) , ' len( mVector)=' ,len(mVector), mVector[len(mVector)-1]
        traitementMatriceA(keyP1, matriceA, dicRealP1, mVector)
コード例 #2
0
def traitementMatrice(dicRealP1, dicMatrice, dicNoProduct):
    codeP1 = dicRealP1.keys()
    codeP1.sort()
    for keyP1 in codeP1:  #key = country,year
        nbrEleP1 = len(dicRealP1[keyP1]['P1'])
        matriceA = zeros((nbrEleP1, nbrEleP1), dtype=float)
        matriceInput = zeros((nbrEleP1, nbrEleP1), dtype=float)
        ligne = 0
        col = 0
        dicRealP1[keyP1]['P1'].sort()
        vectorP1 = dicRealP1[keyP1]['P1']
        vectorZero = libMatrix.fonctionVectorZero(vectorP1)
        for productLst in dicRealP1[keyP1][
                'P1']:  #chaque ligne est une liste avec le code produit et la valeur
            productLst = productLst.split('#')
            productP1 = productLst[0]
            valueP1 = float(productLst[1])
            keyMatriceP1 = keyP1 + '#' + productP1
            ligne = 0
            if dicNoProduct.has_key(keyMatriceP1):
                continue
            else:
                try:  # la ligne de la matrice est dans P1
                    dicMatrice[keyMatriceP1].sort()
                    vectorMatrice = dicMatrice[keyMatriceP1]
                except:  #la ligne est dans P1 mais PAS dans la matrice, on met un vector avec les valeurs 0 ex: CPA_T pour EE
                    vectorMatrice = vectorZero
                    fileLog.write(
                        'le produit ' + productP1 +
                        ' existe dans P1 mais pas dans la MATRICE = ' + keyP1 +
                        '\n')
                vectorP1 = dicRealP1[keyP1]['P1']
                #evite les decalages entre P1 et la Matrice, on peux avoir une colonne dans P1 et pas dans la matrice
                #dans ce cas on ajoute une colonne avec des zero
                ligneAtraiter = libMatrix.vectorAtraiter(
                    vectorMatrice, vectorP1)
                ligneAtraiter.sort()
                for ligneMatrice in ligneAtraiter:  # ATTENTION CHAQUE LIGNE CORRESPOND AUX ELEMENTS D'UNE ligne
                    ligneMatrice = ligneMatrice.split('#')
                    product = ligneMatrice[0]
                    value = float(ligneMatrice[1])
                    keyNoProduct = keyP1 + "#" + product
                    if dicNoProduct.has_key(keyNoProduct):
                        continue
                    # on calcul la matrice A qui est celle des coeficient technique
                    else:
                        if (
                                ligne < nbrEleP1
                        ):  # le nombre element dans la ligne doit etre le meme que celui de P1
                            matriceInput[ligne, col] = value
                            try:
                                matriceA[ligne, col] = value / valueP1
                            except:
                                fileLog.write('divide by 0.001 ' +
                                              keyMatriceP1 + ',Col=' +
                                              str(col) + ',ligne=' +
                                              str(ligne) + ',value=' +
                                              str(value) + ',valueP1 ' +
                                              str(valueP1) + '\n')
                                #matriceA[ligne,col] = value/0.001
                            ligne += 1
                        else:
                            fileLog.write(
                                'Probleme matrice: nbrLigne > nbrEleP1 ' +
                                keyMatriceP1 + ',Col=' + str(col) + ',ligne=' +
                                str(ligne) + ',maxEle=' + str(nbrEleP1) + ' ' +
                                str(len(dicMatrice[keyMatriceP1])) + '\n')
                if (col < nbrEleP1):
                    col += 1
                else:
                    fileLog.write('Probleme matrice: nbrColonne > nbrEleP1 ' +
                                  keyMatrice + ',Col=' + str(col) + ',ligne=' +
                                  str(ligne) + ',maxEle=' + str(nbrEleP1) +
                                  '\n')
        traitementMatriceA(keyP1, matriceA, dicRealP1, matriceInput)