1

複数の配列を提供する関数があり、これらを行列にする必要があります。

def equations(specie, elements):
 for x in specie:
   formula = parse_formula(x)
   print extracting_columns(formula, elements)

私が得ているもの:

equations(['OH', 'CO2','C3O3','H2O3','CO','C3H1'], ['H', 'C', 'O']) 
[ 1.  0.  1.]
[ 0.  1.  2.]
[ 0.  3.  3.]
[ 2.  0.  3.]
[ 0.  1.  1.]
[ 1.  3.  0.]

([[1,0,1][[ 0., 1., 2.][ 0. , 3. , 3.][ 2. , 0. ,3.][ 0. , 1. ,1.][ 1. , 3., 0.]])

私はしばらくこれをいじっていて、それを理解できません。

私の過去の関数が必要な場合は、以下のとおりです。

def extracting_columns(specie, elements):
  species_vector=zeros(len(elements))
  for (el,mul) in specie:
    species_vector[elements.index(el)]=mul

  return species_vector
4

1 に答える 1

2

各行を印刷する代わりに、それらをリストにまとめます (例: result):

def equations(specie, elements):
    result = []
    for x in specie:
        formula = parse_formula(x)
        result.append(extracting_columns(formula, elements))
    return np.array(result)

例えば、

import numpy as np
import re

def equations(specie, elements):
    result = []
    for x in specie:
        formula = parse_formula(x)
        result.append(extracting_columns(formula, elements))
    return np.array(result)

def extracting_columns(formula, elements):
    return [formula.get(e, 0) for e in elements]

def parse_formula(formula):
    elts = iter(re.split(r'([A-Z][a-z]*)',formula)[1:])
    return {element:toint(num) for element, num in zip(*[elts]*2)}

def toint(num):
    try:
        return int(num)
    except ValueError:
        return 1

print(equations(['OH', 'CO2','C3O3','H2O3','CO','C3H1'], ['H', 'C', 'O']))

収量

[[1 0 1]
 [0 1 2]
 [0 3 3]
 [2 0 3]
 [0 1 1]
 [1 3 0]]
于 2012-12-18T02:30:01.863 に答える