From tatadeluxe en gmail.com Thu Feb 8 16:36:17 2018 From: tatadeluxe en gmail.com (Javier Rovegno Campos) Date: Thu, 8 Feb 2018 18:36:17 -0300 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: Hola Manuel: No se si entendí bien tu pregunta, pero para lo que necesitas se me ocurre que puedes usar pandas: from io import StringIO import pandas as pd DATA="""id,target,valores 1,100,20 1,100,30 1,100,50 1,100,15 1,100,45 1,100,60 2,150,75 2,150,75 2,150,100 3,1500,900 3,1500,500 3,1500,600 3,1500,1000 3,1500,750 3,1500,200 3,1500,300 3,1500,10 3,1500,30 3,1500,50 """ df = pd.read_csv(StringIO(DATA)) suma = df.groupby(['id','target'], as_index=False)['valores'].sum() print(suma) suma.query('valores-1 < target < valores+1') Te dejo el gist https://gist.github.com/jrovegno/e1eb651b58a4338bfe9eff203d6c1e1c Saludos 2018-01-12 17:35 GMT-03:00 Manuel A. Estevez Fernandez : > Hola a todos, tengo la siguiente necesidad: > > Encontrar una combinación de valores pertenecientes a una colección cuyo > resultado sea un numero determinado. > > Algo así: > id target valores > 1 100 20 > 1 100 30 > 1 100 50 > 1 100 15 > 1 100 45 > 1 100 60 > 2 150 75 > 2 150 75 > 2 150 100 > 3 1500 900 > 3 1500 500 > 3 1500 600 > 3 1500 1000 > 3 1500 750 > 3 1500 200 > 3 1500 300 > 3 1500 10 > 3 1500 30 > 3 1500 50 > > Toda esta información la tengo en un archivo csv. El cual leo y genero un > diccionario: > > { > id : { target : target , values : [ valores ] } > , id : { target : target , values : [ valores ] } > } > > con el siguiente codigo realizo un matriz de verdad de la longitud de la > cantidad de los valores por ID, y realizo la suma si es lo del target +1-1 > con ese vale. > > import numpy as np > import itertools > > for id in in diccionario : > for tup in itertools.product([0,1] , repeat=len(diccionario[id][' > values'])): > resultado = np.sum( np.dot( np.array(list(tup)) , np.array( > diccionario[id]['valores'] ) ) ) > if ( diccionario[id]['target'] - 1) <= resultado and resultado <= ( > diccionario[id]['target'] + 1) : > print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ', > diccionario[id]['valores'] > break > > > > La problematica que tengo es que obviamente entre mas grande sea la > cantida de valores la combinaciones serán muchas más. > > Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de > como empezar. > > No sé como hacerlo o si sea posible lo siguiente: > Lanzar un proceso por ID. > -Generar una segmentación de la matriz de verdad y asignarla un subproceso > -Cuando algún subproceso encuentre un resultado válido, lo devuelva y se > detengan los subprocesos > -Avanzar al siguiente ID. > > Saludos y gracias de antemano. > > > > Manuel Alejandro Estévez Fernández > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From stvzito en gmail.com Thu Feb 8 17:26:55 2018 From: stvzito en gmail.com (Manuel A. Estevez Fernandez) Date: Thu, 8 Feb 2018 16:26:55 -0600 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: Hola gracias por tu sugerencia. Lo que necesito es por ejemplo: para el ID 1 el target es 100, entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ? 20, 30, 50, 15, 45, 60 20 + 30 + 50 = 100 Lo que tu sugieres es que sume primero todos los números para cierto ID y luego valide si esa suma corresponde al target. Saludos. Manuel Alejandro Estévez Fernández El 8 de febrero de 2018, 15:36, Javier Rovegno Campos escribió: > Hola Manuel: > > No se si entendí bien tu pregunta, pero para lo que necesitas se me ocurre > que puedes usar pandas: > > from io import StringIO > import pandas as pd > > > DATA="""id,target,valores > 1,100,20 > 1,100,30 > 1,100,50 > 1,100,15 > 1,100,45 > 1,100,60 > 2,150,75 > 2,150,75 > 2,150,100 > 3,1500,900 > 3,1500,500 > 3,1500,600 > 3,1500,1000 > 3,1500,750 > 3,1500,200 > 3,1500,300 > 3,1500,10 > 3,1500,30 > 3,1500,50 > """ > > df = pd.read_csv(StringIO(DATA)) > suma = df.groupby(['id','target'], as_index=False)['valores'].sum() > print(suma) > suma.query('valores-1 < target < valores+1') > > > Te dejo el gist https://gist.github.com/jrovegno/ > e1eb651b58a4338bfe9eff203d6c1e1c > > Saludos > > > 2018-01-12 17:35 GMT-03:00 Manuel A. Estevez Fernandez > : > >> Hola a todos, tengo la siguiente necesidad: >> >> Encontrar una combinación de valores pertenecientes a una colección cuyo >> resultado sea un numero determinado. >> >> Algo así: >> id target valores >> 1 100 20 >> 1 100 30 >> 1 100 50 >> 1 100 15 >> 1 100 45 >> 1 100 60 >> 2 150 75 >> 2 150 75 >> 2 150 100 >> 3 1500 900 >> 3 1500 500 >> 3 1500 600 >> 3 1500 1000 >> 3 1500 750 >> 3 1500 200 >> 3 1500 300 >> 3 1500 10 >> 3 1500 30 >> 3 1500 50 >> >> Toda esta información la tengo en un archivo csv. El cual leo y genero un >> diccionario: >> >> { >> id : { target : target , values : [ valores ] } >> , id : { target : target , values : [ valores ] } >> } >> >> con el siguiente codigo realizo un matriz de verdad de la longitud de la >> cantidad de los valores por ID, y realizo la suma si es lo del target +1-1 >> con ese vale. >> >> import numpy as np >> import itertools >> >> for id in in diccionario : >> for tup in itertools.product([0,1] , repeat=len(diccionario[id]['va >> lues'])): >> resultado = np.sum( np.dot( np.array(list(tup)) , np.array( >> diccionario[id]['valores'] ) ) ) >> if ( diccionario[id]['target'] - 1) <= resultado and resultado <= ( >> diccionario[id]['target'] + 1) : >> print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ', >> diccionario[id]['valores'] >> break >> >> >> >> La problematica que tengo es que obviamente entre mas grande sea la >> cantida de valores la combinaciones serán muchas más. >> >> Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de >> como empezar. >> >> No sé como hacerlo o si sea posible lo siguiente: >> Lanzar un proceso por ID. >> -Generar una segmentación de la matriz de verdad y asignarla un subproceso >> -Cuando algún subproceso encuentre un resultado válido, lo devuelva y se >> detengan los subprocesos >> -Avanzar al siguiente ID. >> >> Saludos y gracias de antemano. >> >> >> >> Manuel Alejandro Estévez Fernández >> >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> >> > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From jcaballero.hep en gmail.com Thu Feb 8 17:43:02 2018 From: jcaballero.hep en gmail.com (Jose Caballero) Date: Thu, 8 Feb 2018 17:43:02 -0500 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: . > > Lo que necesito es por ejemplo: > > para el ID 1 el target es 100, > > entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ? > 20, 30, 50, 15, 45, 60 > 20 + 30 + 50 = 100 > En primera aproximaci'on, yo lo intentar'ia con una funci'on recursiva. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From pych3m4 en gmail.com Fri Feb 9 08:08:09 2018 From: pych3m4 en gmail.com (Chema Cortes) Date: Fri, 9 Feb 2018 14:08:09 +0100 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: El 8 de febrero de 2018, 23:26, Manuel A. Estevez Fernandez < stvzito en gmail.com> escribió: > Hola gracias por tu sugerencia. > > Lo que necesito es por ejemplo: > > para el ID 1 el target es 100, > > entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ? > 20, 30, 50, 15, 45, 60 > 20 + 30 + 50 = 100 > Sin conocer la naturaleza de los datos, para una primera aproximación se podrían obtener todas las combinaciones posibles de los valores y comprobar si alguna suma el valor objetivo: from itertools import combinations combs = (lst for n in range(1, len(valores)) for lst in combinations(valores, n) if sum(lst)==target) res = next(combs, None) Obtienes la primera combinación que sume el valor objetivo, o None si no encuentra ninguna combinación. Se puede pensar alguna optimización más del algoritmo según si los datos están ordenados o si supieras en qué rango se mueven. En cuanto a usar procesos, es fácil particionar el problema agrupando los datos por ID (ya lo tienes hecho para generar el diccionario). El módulo multiprocessing facilita mucho las cosas (Ahora no tengo tiempo para ponerte un ejemplo). -- Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": http://ch3m4.org/blog Buscador Python Hispano: http://ch3m4.org/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From davidmenhur en gmail.com Fri Feb 9 09:06:53 2018 From: davidmenhur en gmail.com (=?UTF-8?B?RGHPgGlk?=) Date: Fri, 9 Feb 2018 15:06:53 +0100 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: La forma eficiente de resolver el problema es usando programación dinámica (dynamic programming), y es equivalente a uno de los problemas clásicos: dar cambio en monedas. Hay mucha documentación al respecto, sobre todo en inglés. Un par de enlaces, sin garantía de calidad: https://interactivepython.org/runestone/static/pythonds/Recursion/DynamicProgramming.html https://es.wikibooks.org/wiki/Programaci%C3%B3n_din%C3%A1mica/Problema_de_las_monedas_con_programaci%C3%B3n_din%C3%A1mica Si te interesa, mi recomendación es que estudies programación dinámica en general, en cuanto lo pilles, aplicarlo a tu problema es fácil. /David. 2018-01-12 21:35 GMT+01:00 Manuel A. Estevez Fernandez : > Hola a todos, tengo la siguiente necesidad: > > Encontrar una combinación de valores pertenecientes a una colección cuyo > resultado sea un numero determinado. > > Algo así: > id target valores > 1 100 20 > 1 100 30 > 1 100 50 > 1 100 15 > 1 100 45 > 1 100 60 > 2 150 75 > 2 150 75 > 2 150 100 > 3 1500 900 > 3 1500 500 > 3 1500 600 > 3 1500 1000 > 3 1500 750 > 3 1500 200 > 3 1500 300 > 3 1500 10 > 3 1500 30 > 3 1500 50 > > Toda esta información la tengo en un archivo csv. El cual leo y genero un > diccionario: > > { > id : { target : target , values : [ valores ] } > , id : { target : target , values : [ valores ] } > } > > con el siguiente codigo realizo un matriz de verdad de la longitud de la > cantidad de los valores por ID, y realizo la suma si es lo del target +1-1 > con ese vale. > > import numpy as np > import itertools > > for id in in diccionario : > for tup in itertools.product([0,1] , repeat=len(diccionario[id][' > values'])): > resultado = np.sum( np.dot( np.array(list(tup)) , np.array( > diccionario[id]['valores'] ) ) ) > if ( diccionario[id]['target'] - 1) <= resultado and resultado <= ( > diccionario[id]['target'] + 1) : > print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ', > diccionario[id]['valores'] > break > > > > La problematica que tengo es que obviamente entre mas grande sea la > cantida de valores la combinaciones serán muchas más. > > Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de > como empezar. > > No sé como hacerlo o si sea posible lo siguiente: > Lanzar un proceso por ID. > -Generar una segmentación de la matriz de verdad y asignarla un subproceso > -Cuando algún subproceso encuentre un resultado válido, lo devuelva y se > detengan los subprocesos > -Avanzar al siguiente ID. > > Saludos y gracias de antemano. > > > > Manuel Alejandro Estévez Fernández > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From stvzito en gmail.com Fri Feb 9 17:30:47 2018 From: stvzito en gmail.com (Manuel A. Estevez Fernandez) Date: Fri, 9 Feb 2018 16:30:47 -0600 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: Gracias por la respuesta, al principio intenté algo así, sin embargo con listas de 1000 / 2000 valores se vuelve muy pesado. Manuel Alejandro Estévez Fernández El 9 de febrero de 2018, 7:08, Chema Cortes escribió: > El 8 de febrero de 2018, 23:26, Manuel A. Estevez Fernandez < > stvzito en gmail.com> escribió: > >> Hola gracias por tu sugerencia. >> >> Lo que necesito es por ejemplo: >> >> para el ID 1 el target es 100, >> >> entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ? >> 20, 30, 50, 15, 45, 60 >> 20 + 30 + 50 = 100 >> > > Sin conocer la naturaleza de los datos, para una primera aproximación se > podrían obtener todas las combinaciones posibles de los valores y comprobar > si alguna suma el valor objetivo: > > from itertools import combinations > > combs = (lst for n in range(1, len(valores)) > for lst in combinations(valores, n) > if sum(lst)==target) > > res = next(combs, None) > > Obtienes la primera combinación que sume el valor objetivo, o None si no > encuentra ninguna combinación. Se puede pensar alguna optimización más del > algoritmo según si los datos están ordenados o si supieras en qué rango se > mueven. > > En cuanto a usar procesos, es fácil particionar el problema agrupando los > datos por ID (ya lo tienes hecho para generar el diccionario). El módulo > multiprocessing facilita mucho las cosas (Ahora no tengo tiempo para > ponerte un ejemplo). > > > > -- > Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": > http://ch3m4.org/blog > Buscador Python Hispano: http://ch3m4.org/python-es > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From stvzito en gmail.com Fri Feb 9 17:31:05 2018 From: stvzito en gmail.com (Manuel A. Estevez Fernandez) Date: Fri, 9 Feb 2018 16:31:05 -0600 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: Gracias por el dato, voy a intentarlo. Saludos. Manuel Alejandro Estévez Fernández El 9 de febrero de 2018, 8:06, Da?id escribió: > La forma eficiente de resolver el problema es usando programación dinámica > (dynamic programming), y es equivalente a uno de los problemas clásicos: > dar cambio en monedas. Hay mucha documentación al respecto, sobre todo en > inglés. > > Un par de enlaces, sin garantía de calidad: > > https://interactivepython.org/runestone/static/pythonds/ > Recursion/DynamicProgramming.html > https://es.wikibooks.org/wiki/Programaci%C3%B3n_din%C3% > A1mica/Problema_de_las_monedas_con_programaci%C3%B3n_din%C3%A1mica > > Si te interesa, mi recomendación es que estudies programación dinámica en > general, en cuanto lo pilles, aplicarlo a tu problema es fácil. > > /David. > > 2018-01-12 21:35 GMT+01:00 Manuel A. Estevez Fernandez > : > >> Hola a todos, tengo la siguiente necesidad: >> >> Encontrar una combinación de valores pertenecientes a una colección cuyo >> resultado sea un numero determinado. >> >> Algo así: >> id target valores >> 1 100 20 >> 1 100 30 >> 1 100 50 >> 1 100 15 >> 1 100 45 >> 1 100 60 >> 2 150 75 >> 2 150 75 >> 2 150 100 >> 3 1500 900 >> 3 1500 500 >> 3 1500 600 >> 3 1500 1000 >> 3 1500 750 >> 3 1500 200 >> 3 1500 300 >> 3 1500 10 >> 3 1500 30 >> 3 1500 50 >> >> Toda esta información la tengo en un archivo csv. El cual leo y genero un >> diccionario: >> >> { >> id : { target : target , values : [ valores ] } >> , id : { target : target , values : [ valores ] } >> } >> >> con el siguiente codigo realizo un matriz de verdad de la longitud de la >> cantidad de los valores por ID, y realizo la suma si es lo del target +1-1 >> con ese vale. >> >> import numpy as np >> import itertools >> >> for id in in diccionario : >> for tup in itertools.product([0,1] , repeat=len(diccionario[id]['va >> lues'])): >> resultado = np.sum( np.dot( np.array(list(tup)) , np.array( >> diccionario[id]['valores'] ) ) ) >> if ( diccionario[id]['target'] - 1) <= resultado and resultado <= ( >> diccionario[id]['target'] + 1) : >> print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ', >> diccionario[id]['valores'] >> break >> >> >> >> La problematica que tengo es que obviamente entre mas grande sea la >> cantida de valores la combinaciones serán muchas más. >> >> Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de >> como empezar. >> >> No sé como hacerlo o si sea posible lo siguiente: >> Lanzar un proceso por ID. >> -Generar una segmentación de la matriz de verdad y asignarla un subproceso >> -Cuando algún subproceso encuentre un resultado válido, lo devuelva y se >> detengan los subprocesos >> -Avanzar al siguiente ID. >> >> Saludos y gracias de antemano. >> >> >> >> Manuel Alejandro Estévez Fernández >> >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> >> > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From felix.listadebian en gmail.com Fri Feb 9 21:37:27 2018 From: felix.listadebian en gmail.com (Felix Perez) Date: Fri, 9 Feb 2018 23:37:27 -0300 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: El 9 de febrero de 2018, 19:30, Manuel A. Estevez Fernandez escribió: > Gracias por la respuesta, al principio intenté algo así, sin embargo con > listas de 1000 / 2000 valores se vuelve muy pesado. > > > ????? > Manuel Alejandro Estévez Fernández > > > > El 9 de febrero de 2018, 7:08, Chema Cortes escribió: >> >> El 8 de febrero de 2018, 23:26, Manuel A. Estevez Fernandez >> escribió: >>> >>> Hola gracias por tu sugerencia. >>> >>> Lo que necesito es por ejemplo: >>> >>> para el ID 1 el target es 100, >>> >>> entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ? >>> 20, 30, 50, 15, 45, 60 >>> 20 + 30 + 50 = 100 >> >> >> Sin conocer la naturaleza de los datos, para una primera aproximación se >> podrían obtener todas las combinaciones posibles de los valores y comprobar >> si alguna suma el valor objetivo: >> >> from itertools import combinations >> >> combs = (lst for n in range(1, len(valores)) >> for lst in combinations(valores, n) >> if sum(lst)==target) >> >> res = next(combs, None) >> >> Obtienes la primera combinación que sume el valor objetivo, o None si no >> encuentra ninguna combinación. Se puede pensar alguna optimización más del >> algoritmo según si los datos están ordenados o si supieras en qué rango se >> mueven. >> >> En cuanto a usar procesos, es fácil particionar el problema agrupando los >> datos por ID (ya lo tienes hecho para generar el diccionario). El módulo >> multiprocessing facilita mucho las cosas (Ahora no tengo tiempo para ponerte >> un ejemplo). >> >> >> >> -- >> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": >> http://ch3m4.org/blog >> Buscador Python Hispano: http://ch3m4.org/python-es >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > -- usuario linux #274354 normas de la lista: http://wiki.debian.org/es/NormasLista como hacer preguntas inteligentes: http://www.sindominio.net/ayuda/preguntas-inteligentes.html From felix.listadebian en gmail.com Fri Feb 9 21:38:12 2018 From: felix.listadebian en gmail.com (Felix Perez) Date: Fri, 9 Feb 2018 23:38:12 -0300 Subject: [Python-es] =?utf-8?q?Obtenci=C3=B3n_de_Sumandos_para_un_Target_?= =?utf-8?q?a_partir_de_una_colecci=C3=B3n_de_valores?= In-Reply-To: References: Message-ID: El 9 de febrero de 2018, 19:31, Manuel A. Estevez Fernandez< stvzito en gmail.com> escribió: > Gracias por el dato, voy a intentarlo. > Saludos. > > ????? ¿A quién contestas? > > > Manuel Alejandro Estévez Fernández > > > > El 9 de febrero de 2018, 8:06, Da?id escribió: > >> La forma eficiente de resolver el problema es usando programación >> dinámica (dynamic programming), y es equivalente a uno de los problemas >> clásicos: dar cambio en monedas. Hay mucha documentación al respecto, sobre >> todo en inglés. >> >> Un par de enlaces, sin garantía de calidad: >> >> https://interactivepython.org/runestone/static/pythonds/Recu >> rsion/DynamicProgramming.html >> https://es.wikibooks.org/wiki/Programaci%C3%B3n_din%C3%A1mic >> a/Problema_de_las_monedas_con_programaci%C3%B3n_din%C3%A1mica >> >> Si te interesa, mi recomendación es que estudies programación dinámica en >> general, en cuanto lo pilles, aplicarlo a tu problema es fácil. >> >> /David. >> >> 2018-01-12 21:35 GMT+01:00 Manuel A. Estevez Fernandez > >: >> >>> Hola a todos, tengo la siguiente necesidad: >>> >>> Encontrar una combinación de valores pertenecientes a una colección cuyo >>> resultado sea un numero determinado. >>> >>> Algo así: >>> id target valores >>> 1 100 20 >>> 1 100 30 >>> 1 100 50 >>> 1 100 15 >>> 1 100 45 >>> 1 100 60 >>> 2 150 75 >>> 2 150 75 >>> 2 150 100 >>> 3 1500 900 >>> 3 1500 500 >>> 3 1500 600 >>> 3 1500 1000 >>> 3 1500 750 >>> 3 1500 200 >>> 3 1500 300 >>> 3 1500 10 >>> 3 1500 30 >>> 3 1500 50 >>> >>> Toda esta información la tengo en un archivo csv. El cual leo y genero >>> un diccionario: >>> >>> { >>> id : { target : target , values : [ valores ] } >>> , id : { target : target , values : [ valores ] } >>> } >>> >>> con el siguiente codigo realizo un matriz de verdad de la longitud de la >>> cantidad de los valores por ID, y realizo la suma si es lo del target +1-1 >>> con ese vale. >>> >>> import numpy as np >>> import itertools >>> >>> for id in in diccionario : >>> for tup in itertools.product([0,1] , repeat=len(diccionario[id]['va >>> lues'])): >>> resultado = np.sum( np.dot( np.array(list(tup)) , np.array( >>> diccionario[id]['valores'] ) ) ) >>> if ( diccionario[id]['target'] - 1) <= resultado and resultado <= ( >>> diccionario[id]['target'] + 1) : >>> print 'ID : ', id, ' Combinacion : ' , tup , 'Valores ', >>> diccionario[id]['valores'] >>> break >>> >>> >>> >>> La problematica que tengo es que obviamente entre mas grande sea la >>> cantida de valores la combinaciones serán muchas más. >>> >>> Tengo la idea de utilizar un poco de paralelizar, pero no tengo idea de >>> como empezar. >>> >>> No sé como hacerlo o si sea posible lo siguiente: >>> Lanzar un proceso por ID. >>> -Generar una segmentación de la matriz de verdad y asignarla un >>> subproceso >>> -Cuando algún subproceso encuentre un resultado válido, lo devuelva y se >>> detengan los subprocesos >>> -Avanzar al siguiente ID. >>> >>> Saludos y gracias de antemano. >>> >>> >>> >>> Manuel Alejandro Estévez Fernández >>> >>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es en python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >>> >> >> _______________________________________________ >> Python-es mailing list >> Python-es en python.org >> https://mail.python.org/mailman/listinfo/python-es >> >> > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > -- usuario linux #274354 normas de la lista: http://wiki.debian.org/es/NormasLista como hacer preguntas inteligentes: http://www.sindominio.net/ayuda/preguntas-inteligentes.html ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From mlacunza en gmail.com Sat Feb 24 11:13:28 2018 From: mlacunza en gmail.com (Mario Lacunza) Date: Sat, 24 Feb 2018 11:13:28 -0500 Subject: [Python-es] Generar Codigo Fuente Message-ID: Hola, una ayuda con este tema: necesito generar archivos de código de otros lenguajes (php, js, etc) usando Python, como son la mayoría iguales quiero automatizarlo, sólo cambian ciertas palabras en las mismas directivas, como el nombre de un función etc. Así teniendo una lista de palabras a reemplazar mi código debe crear los archivos, rellenarlos del código correcto y cambiar los nombres de función/otras en cada uno. Cuál es la mejor forma de hacer ésta última parte? Saludos / Best regards Mario Lacunza Email:: mlacunza en gmail.com Personal Website:: http://www.lacunza.biz/ Hosting:: http://mlv-host.com/ Skype: mlacunzav Lima - Peru ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From elmau en amigos.email Sat Feb 24 21:10:56 2018 From: elmau en amigos.email (Mauricio Baeza Servin) Date: Sat, 24 Feb 2018 20:10:56 -0600 (CST) Subject: [Python-es] Generar Codigo Fuente In-Reply-To: Message-ID: On Sat, 24 Feb 2018 11:13:28 -0500, Mario Lacunza wrote: > Hola, > > una ayuda con este tema: necesito generar archivos de código de otros > lenguajes (php, js, etc) usando Python, como son la mayoría iguales quiero > automatizarlo, sólo cambian ciertas palabras en las mismas directivas, como > el nombre de un función etc. Así teniendo una lista de palabras a > reemplazar mi código debe crear los archivos, rellenarlos del código > correcto y cambiar los nombres de función/otras en cada uno. > > Cuál es la mejor forma de hacer ésta última parte? > > Saludos / Best regards > > Mario Lacunza Hola... La mejor será la que cumpla tu cometido y te guste más... Tienes un mundo de opciones, tanto en el core[1][2], como con librerías externas[3]. Con algunos ejemplos simples de lo que quieres hacer, se te podría ayudar mejor. Saludos [1] https://docs.python.org/3.6/library/string.html#template-strings [2] https://docs.python.org/3.6/library/string.html#formatstrings [3] https://wiki.python.org/moin/Templating From icorrecam en gmail.com Sun Feb 25 11:25:36 2018 From: icorrecam en gmail.com (icorrecam) Date: Sun, 25 Feb 2018 16:25:36 +0000 Subject: [Python-es] Generar Codigo Fuente In-Reply-To: References: Message-ID: Otro planteamiento: https://www.google.es/search?q=python+to+js&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&dcr=0&ei=KLmSWvDFHYaZX6fHvBg https://github.com/dan-da/py2php ... El 25/2/2018 3:14, "Mauricio Baeza Servin" escribió: > On Sat, 24 Feb 2018 11:13:28 -0500, Mario Lacunza > wrote: > > > Hola, > > > > una ayuda con este tema: necesito generar archivos de código de otros > > lenguajes (php, js, etc) usando Python, como son la mayoría iguales > quiero > > automatizarlo, sólo cambian ciertas palabras en las mismas directivas, > como > > el nombre de un función etc. Así teniendo una lista de palabras a > > reemplazar mi código debe crear los archivos, rellenarlos del código > > correcto y cambiar los nombres de función/otras en cada uno. > > > > Cuál es la mejor forma de hacer ésta última parte? > > > > Saludos / Best regards > > > > Mario Lacunza > > > Hola... > > La mejor será la que cumpla tu cometido y te guste más... > > Tienes un mundo de opciones, tanto en el core[1][2], como con librerías > externas[3]. > > Con algunos ejemplos simples de lo que quieres hacer, se te podría ayudar > mejor. > > > Saludos > > [1] https://docs.python.org/3.6/library/string.html#template-strings > [2] https://docs.python.org/3.6/library/string.html#formatstrings > [3] https://wiki.python.org/moin/Templating > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From josech en openintelligence.mx Sun Feb 25 16:43:18 2018 From: josech en openintelligence.mx (=?UTF-8?Q?Jos=c3=a9_Luis_Chiquete?=) Date: Sun, 25 Feb 2018 15:43:18 -0600 Subject: [Python-es] Generar Codigo Fuente In-Reply-To: References: Message-ID: <8f7ba2db-7eb7-a780-33a8-0c3720d2524c@openintelligence.mx> Hola. El proyecto Apache Thrift hace algo como lo que quieres hacer. https://thrift.apache.org/ Saludos. El 24/02/18 a las 10:13, Mario Lacunza escribió: > Hola, > > una ayuda con este tema: necesito generar archivos de código de otros > lenguajes (php, js, etc) usando Python, como son la mayoría iguales > quiero automatizarlo, sólo cambian ciertas palabras en las mismas > directivas, como el nombre de un función etc. Así teniendo una lista > de palabras a reemplazar mi código debe crear los archivos, > rellenarlos del código correcto y cambiar los nombres de función/otras > en cada uno. > > Cuál es la mejor forma de hacer ésta última parte? > > Saludos / Best regards > > Mario Lacunza > Email:: mlacunza en gmail.com > Personal Website:: http://www.lacunza.biz/ > Hosting:: http://mlv-host.com/ > Skype: mlacunzav > > Lima - Peru > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From mlacunza en gmail.com Sun Feb 25 19:43:24 2018 From: mlacunza en gmail.com (Mario Lacunza) Date: Sun, 25 Feb 2018 19:43:24 -0500 Subject: [Python-es] Generar Codigo Fuente In-Reply-To: <8f7ba2db-7eb7-a780-33a8-0c3720d2524c@openintelligence.mx> References: <8f7ba2db-7eb7-a780-33a8-0c3720d2524c@openintelligence.mx> Message-ID: Gracias a todos por sus respuestas! Saludos / Best regards Mario Lacunza Email:: mlacunza en gmail.com Personal Website:: http://www.lacunza.biz/ Hosting:: http://mlv-host.com/ Skype: mlacunzav Lima - Peru El 25 de febrero de 2018, 16:43, José Luis Chiquete< josech en openintelligence.mx> escribió: > Hola. > > El proyecto Apache Thrift hace algo como lo que quieres hacer. > > https://thrift.apache.org/ > > Saludos. > > El 24/02/18 a las 10:13, Mario Lacunza escribió: > > Hola, > > una ayuda con este tema: necesito generar archivos de código de otros > lenguajes (php, js, etc) usando Python, como son la mayoría iguales quiero > automatizarlo, sólo cambian ciertas palabras en las mismas directivas, como > el nombre de un función etc. Así teniendo una lista de palabras a > reemplazar mi código debe crear los archivos, rellenarlos del código > correcto y cambiar los nombres de función/otras en cada uno. > > Cuál es la mejor forma de hacer ésta última parte? > > Saludos / Best regards > > Mario Lacunza > Email:: mlacunza en gmail.com > Personal Website:: http://www.lacunza.biz/ > Hosting:: http://mlv-host.com/ > Skype: mlacunzav > > Lima - Peru > > > _______________________________________________ > Python-es mailing listPython-es en python.orghttps://mail.python.org/mailman/listinfo/python-es > > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From nimbiotics en gmail.com Sun Feb 25 22:37:57 2018 From: nimbiotics en gmail.com (Mario R. Osorio) Date: Sun, 25 Feb 2018 22:37:57 -0500 Subject: [Python-es] Generar Codigo Fuente In-Reply-To: References: Message-ID: Te recomiendo revisar esta pagina: https://tomassetti.me/parsing-in-python/?nab=1 En lo personal, he trabajado con pyparsing y me ha ido muy bien, pero desconozco tus necesidades exactas. Dtb/Gby ======= Mario R. Osorio B.A.S. of Information Technology A.S. of Computer Programming and Analysis Web page: *http;//mario.osorio.solutions * Email: *mario en osorio.solutions* *Just Choose Python!* ?If I had asked people what they wanted, they would have said faster horses.? ? Henry Ford 2018-02-24 11:13 GMT-05:00 Mario Lacunza : > Hola, > > una ayuda con este tema: necesito generar archivos de código de otros > lenguajes (php, js, etc) usando Python, como son la mayoría iguales quiero > automatizarlo, sólo cambian ciertas palabras en las mismas directivas, como > el nombre de un función etc. Así teniendo una lista de palabras a > reemplazar mi código debe crear los archivos, rellenarlos del código > correcto y cambiar los nombres de función/otras en cada uno. > > Cuál es la mejor forma de hacer ésta última parte? > > Saludos / Best regards > > Mario Lacunza > Email:: mlacunza en gmail.com > Personal Website:: http://www.lacunza.biz/ > Hosting:: http://mlv-host.com/ > Skype: mlacunzav > > Lima - Peru > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es > > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From pych3m4 en gmail.com Mon Feb 26 09:11:29 2018 From: pych3m4 en gmail.com (Chema Cortes) Date: Mon, 26 Feb 2018 15:11:29 +0100 Subject: [Python-es] Generar Codigo Fuente In-Reply-To: References: Message-ID: El 24 de febrero de 2018, 17:13, Mario Lacunza escribió: > Hola, > > una ayuda con este tema: necesito generar archivos de código de otros > lenguajes (php, js, etc) usando Python, como son la mayoría iguales quiero > automatizarlo, sólo cambian ciertas palabras en las mismas directivas, como > el nombre de un función etc. Así teniendo una lista de palabras a > reemplazar mi código debe crear los archivos, rellenarlos del código > correcto y cambiar los nombres de función/otras en cada uno. > > Cuál es la mejor forma de hacer ésta última parte? > > Creo que la forma más sencilla que tienes es usar uno de los estupendos sistemas de plantillas que tiene python. Por ejemplo, jinja: http://jinja.pocoo.org/ -- Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": http://ch3m4.org/blog Buscador Python Hispano: http://ch3m4.org/python-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: