33bits

Versión completa: Esto también es otro arte...el ARTE de programar
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
¿Pero eso lo entiendes? roto2
(20-08-2015 19:57)Jase [ -> ]¿Pero eso lo entiendes? roto2

Claro, tú no?┬á roto2

Na, al final es estudiarselo sin más. Es una sintaxis como otra cualquiera, pero más enrevesada.
Creo que puedo dar gracias de que no voy a trabajar ensamblador nunca xD
Buenas @jase
te contesto por aquí, pa levantar esto


http://www.oracle.com/technetwork/databa...59378.html

ahí creo que se puede descargar la gratis.. que es la Oracle Express Edition 10g
porque a veces aparecen la Enterprise y que gratis pero en lo que empiezas a crear objetos te dice que necesitas una licencia

pl/sql se usa mucho, la banca privada por ejemplo tiene seudocodigo basado en pl/sql que de por si se necesita unos dos años para medio entenderlo jajajaja
"The version of Oracle Database you are looking for is no longer available on OTN."

Explícame qué es eso de programación orientada a objetos en bases de datos. Sólo sé hacer consultas y manejar datos, pensaba que consistía en eso roto2
eso me pasa por las prisas

@jase aqui tienes la version 11 y 12 http://www.oracle.com/technetwork/databa...92322.html

que te sirven igual, a nivel de desarrollo no hay mucha diferencia
de 10 a 11 es más de eficiciencia de motor y que agregaron objetos clob (para textos muy grandes)
y algunas librerias para desarrollo en web

OTN es el foro de oracle


en pl/sql tienes librerias de funciones.. y creas packages, stored procedures
que puedes llamar desde cualquier sitio del desarrollo
Guay, pues esta noche me lo bajo mola

Y no te saltes lo de la explicación bate
@jase te lo he explicado
es esto "en pl/sql tienes librerias de funciones.. y creas packages, stored procedures
que puedes llamar desde cualquier sitio del desarrollo"
Tambien puede utilizar postgresql que es totalmente gratis y tambien tiene soporte para procedimientos almacenados y toda la pesca. Pero ademas si quiere enlazarlo con java lo mejor es dejarse de procs y usar un ORM como es Hibernate, por ejemplo.
A ver si podéis echarme un cable. Me puse a hacer un programa con python para invertir matrices mediante una descomposición LU. El método incluye una permutación de la matriz, para lo que hay que hacer una matriz de permutación vía pivotación parcial a partir de una matriz identidad. Osease, tenemos tres matrices:
  • La matriz a invertir --> M
  • La matriz identidad --> I
  • La matriz de permutación --> P
Para crear P se recorren las columnas de M buscando los valores máximos en valor absoluto desde la diagonal principal hacia abajo y se permutan las filas de I como si se estuviese poniendo el valor mayor en la diagonal principal. Como ejemplo:

[Imagen: mtx_p7jb01.png]


Para hacer esto yo creé una función que me busca ese valor mayor y me devuelve su posición. Pero luego, mirando ejemplos de esto mismo en internet, me topé con que lo están haciendo metiendo un keyword con una función lambda en la función max(), y no entiendo de qué va el tema. He mirado el tema de funciones lambda y keywords y me pierdo. ¿Alguno podéis arrojar algo de luz al respecto de estas funciones lambda y los keyword?



Mi código para sacar la matriz P:

Código:
def pivot(M):

def find_idx(j):
col = [ abs(M[i][j]) for i in range(j,r) ]
return j + col.index(max(col))

r = len(M)
P = [ [float(i == j) for i in range(r)] for j in range(r) ]
for j in range(r):
swap = find_idx(j)
if j != swap:
P[j], P[swap] = P[swap], P[j]

return P



Y el código que vi y me dejó roto:

Código:
def pivot(M):

r = len(M)
P = [ [float(i == j) for i in range(r)] for j in range(r) ]
for j in range(r):
swap = max( range(j,r), key=lambda i: abs(M[i][j]) )
if j != swap:
P[j], P[swap] = P[swap], P[j]

return P


Y para usarlo por ejemplo tal que así:
Código:
F = [2 ,3 ,4 ,4], [3 ,-1 ,7 ,2], [6 ,4 ,-4 ,0], [1 ,6 ,-2 ,1]
P = pivot(F)
for j in range( len(P) ):
    print( [round(P[j][i],3) for i in range(len(P))] )



Edito: Me cago en la leche, Merche, el foro se carga la identación. Apaña esto, Jase > : ( .
Me ha soplado Jase que @Lamont sabe de esto, así que lo invoco con un ritual malévolo tila .
Hola, te pongo unos ejemplillos:

Las funciones lambda siguen la siguiente sintaxis básica:


Código:
lambda lista_de_parámetros : valor de retorno


Por ejemplo:


Código:
multiplica = lambda a, b: a * b

multiplica(2, 5) -> devuelve 10


Su propósito en la vida es coger un valor y devolver otro sin alterar el estado del objeto que recibe como parámetro.

Python viene de serie con un conjunto de funciones que aceptan objetos iterables y funciones ( que pueden ser lambda, funciones normales, o cualquier objeto que se puede "llamar" con () ):

Por ejemplo la función map, aplica a cada elemento de una lista u objeto iterable una función:


Código:
lista = [1, 2, 3, 4, 5, 6, 7]

def dobla(a):
    return a * 2

map(dobla, lista) -> evalua a [2, 4, 6, 8, 10, 12, 14]


Ahora lo mismo pero esta vez con funciones lambda:


Código:
map(lambda a : a * 2, lista) -> evalua a  [2, 4, 6, 8, 10, 12, 14]


La lista permanece intacta, map genera un nuevo objeto iterable que se puede combinar en otras expresiones.

Dentro de un función lambda, está permitido utilizar if en su expresión ternaria:


Código:
mayorque10 = lambda n : True if n > 10 else False

mayorque10(100) -> True
mayorque10(9) -> False


Un ejemplo un poco más complejo de funciones lambda sería el siguiente, por ejemplo como implementar la propia función map:


Código:
_map = lambda funcion, lista : [funcion(lista[0])] + _map(funcion, lista[1:]) if len(lista) > 1 else [funcion(lista[0])]


Es decir, aplicamos la función a elemento 0 de la lista, metemos ese valor dentro de una nueva lista:

[funcion(lista[0])]

y si todavía queda más de un elemento en la lista, llamamos de forma recursiva a _map con el resto de la lista _map(funcion, lista[1:]),
la sublistas se concatenan y al final obtiene lista final.

Volviendo a tu ejemplo, la función max devuelve el valor máximo de una lista:


Código:
lista = [0, 10, 15]
max(lista) -> 15


max acepta otro argumento, key,  si max no recibe key, la key de cada elemento de la lista es el propio valor del elemento y max
se basa en la key para determinar cual es el elemento mayor.


Código:
Elemento   Key
0,         0
10,        10
15         15


Ahora bien, si por ejemplo, le pasamos la siguiente expresión lambda como key


Código:
max(lista, key=lambda a : 100 if a == 0 else a) -> evalua a 0

Lo que hace es aplicar a cada elemento de la lista la función lambda para obtener la key:



Código:
Elemento   Key
0,         100
10,        10
15         15


Ahora la key máxima es 100, que pertenece al elemento 0. Por lo tanto devuelve 0.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33