In this question viene spiegato come accedere alle parti triagulari lower
e upper
di una determinata matrice, ad esempio:trasforma la parte triangolare superiore/inferiore di una matrice simmetrica (array 2D) in una matrice 1D e la restituisce al formato 2D
m = np.matrix([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])
Qui necessità di trasformare la matrice in un array 1D, che può essere fatto facendo:
indices = np.triu_indices_from(m)
a = np.asarray(m[indices])[-1]
#array([11, 12, 13, 22, 23, 33])
Dopo aver fatto molti calcoli con a
, cambiando i valori, sarà utilizzato per riempire un sy serie mmetric 2D:
new = np.zeros(m.shape)
for i,j in enumerate(zip(*indices)):
new[j]=a[i]
new[j[1],j[0]]=a[i]
Tornando:
array([[ 11., 12., 13.],
[ 12., 22., 23.],
[ 13., 23., 33.]])
Esiste un modo migliore per ottenere questo risultato? Più in particolare, evitando il loop Python per ricostruire l'array 2D?
devo elaborare la matrice medio termine 'a' prima di tornare al simmetrica' 2D-array' –
è possibile manipolare 'm [indup ] 'finché restituisce una matrice numerica 1D nell'ordine corretto. C'è un problema particolare con questo? – Daniel
un deve venire da 'array ([11, 12, 13, 22, 23, 33]) 'a un array di' matrice 2D corrispondente ([[11,12,13], [12,22,23], [13,23,33]]) ' –