2013-08-15 11 views
5

Ho appena provato ad apprendere sia le list comprehensions che le funzioni Lambda. Penso di aver capito il concetto, ma mi è stato assegnato il compito di creare un programma che, se inserito in un intero positivo, crei la matrice identità. Fondamentalmente se l'ho dato in 2 mi avrebbe dato: [[1, 0], [0, 1]] e se l'avessi dato 3: [[1, 0, 0], [0, 1, 0], [0 , 0, 1] quindi elencalo in una lista.Python Lambda Identity Matrix

Ora ho bisogno di creare tutto questo all'interno di una funzione lambda. In modo che se si digita:

FUNCTIONNAME (x) recupererà la matrice identità della dimensione x-by-x.

A proposito, x sarà sempre un numero intero positivo.

Questo è quello che ho finora:

FUNCTIONNAME = lambda x: ##insertCodeHere## for i in range(1, x) 

penso che sto facendo bene, ma io non lo so. Se qualcuno ha un'idea, per favore aiuto!

risposta

6

ne dite:

>>> imatrix = lambda n: [[1 if j == i else 0 for j in range(n)] for i in range(n)] 
>>> imatrix(3) 
[[1, 0, 0], [0, 1, 0], [0, 0, 1]] 

1 if j == i else 0 è un esempio di Python conditional expression.

+0

Grazie per la spiegazione dettagliata! – NoviceProgrammer

4

Questo sarebbe il mio modo preferito per farlo:

identity = lambda x: [[int(i==j) for i in range(x)] for j in range(x)] 

si avvantaggia del fatto che True mappe a 1 e False mappe a 0.

3

Solo per completezza (e per evidenziare come uno in realtà dovrebbe essere facendo cose numerica in python):

import numpy 
list_eye = lambda n: numpy.eye(n).tolist() 

Naturalmente, in pratica, si sarebbe probabilmente solo utilizzare eye(n) da solo e sta lavorando con gli array numpy.