2017-03-06 6 views
0

Wie kann ich den elementweisen Absolutwert einer dünnen komplexen Matrix erhalten? Ist es im Allgemeinen möglich, eine Matrix mithilfe einer benutzerdefinierten Funktion einer anderen zuzuordnen?Elementweise absoluter Wert einer dünn besetzten Matrix

+0

hast du tatsächlich 'np.absolute (spmat)'? –

+0

Sie haben zwei Fragen gestellt, eine sehr spezifische und eine sehr allgemeine. Die Antwort auf die zweite hängt wahrscheinlich davon ab, wie allgemein die benutzerdefinierte Funktion ist, die Sie im Sinn haben. Könnten Sie noch ein paar Beispiele geben, was Sie tun möchten? –

+0

@WarrenWeckesser Paul Panzer gibt beiden die Antwort. Meine benutzerdefinierten Funktionen hätten Nullen Nullen zugeordnet. –

Antwort

1

Für mich ist das folgende funktioniert

import numpy as np 
from scipy import sparse 

a = sparse.identity(5).tocsr() * 1j 
a[2,4] = 1-1j 
b = np.absolute(a) 
b.A 
# array([[ 1.  , 0.  , 0.  , 0.  , 0.  ], 
#  [ 0.  , 1.  , 0.  , 0.  , 0.  ], 
#  [ 0.  , 0.  , 1.  , 0.  , 1.41421356], 
#  [ 0.  , 0.  , 0.  , 1.  , 0.  ], 
#  [ 0.  , 0.  , 0.  , 0.  , 1.  ]]) 

# general functions: use the data attribute to access nonzeros 

b.data = np.exp(b.data) 
b.A 
# array([[ 2.71828183, 0.  , 0.  , 0.  , 0.  ], 
#  [ 0.  , 2.71828183, 0.  , 0.  , 0.  ], 
#  [ 0.  , 0.  , 2.71828183, 0.  , 4.11325038], 
#  [ 0.  , 0.  , 0.  , 2.71828183, 0.  ], 
#  [ 0.  , 0.  , 0.  , 0.  , 2.71828183]]) 
+0

Haben wir nicht gerade herausgefunden, dass 'spärlich' eine Version von allen 'ufunc' hat, die 0 Werte unberührt lassen? Es gibt eine Kopie von sich selbst zurück, aber mit dem 'ufunc' wird auf alle seine' .data' Werte angewendet. – hpaulj

+0

@hpaulj ja, also taten wir es. Das 'data'-Fiedeln ist für Funktionen, die 0 nicht unberührt lassen. Oder sagst du, dass ich über all die anderen "Faulenzen" didaktischer hätte sein sollen? Sie können dort einen Punkt haben. Um ganz ehrlich zu sein, habe ich einen schnellen Check gemacht und habe nicht das "abs" oder "absolute" Mitglied gefunden und natürlich "__abs__" völlig vergessen. Wenn du magst, kannst du einen Beitrag über die Dinge schreiben, die ich weggelassen habe. –

+0

http://stackoverflow.com/questions/42408772/element-wise-exp-of-scipy-sparse-matrix - auf die Entdeckung, dass es eine spärliche 'expm1' Methode gibt. – hpaulj

1

Die Sparse Matrix Objekte in scipy __abs__() die Methode implementieren. Das bedeutet, dass Sie Pythons eingebauteabs() Funktion verwenden können. Es wird den Anruf an die __abs__() Methode senden. Zum Beispiel

In [16]: from scipy.sparse import csr_matrix 

In [17]: a = csr_matrix([[1+1j, 0, 0, 0], [0, -2, 0, 0], [0, 0, 0, 0], [3-4j, 0, -5j, 0]]) 

In [18]: a.A 
Out[18]: 
array([[ 1.+1.j, 0.+0.j, 0.+0.j, 0.+0.j], 
     [ 0.+0.j, -2.+0.j, 0.+0.j, 0.+0.j], 
     [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], 
     [ 3.-4.j, 0.+0.j, 0.-5.j, 0.+0.j]]) 

In [19]: b = abs(a) 

In [20]: b.A 
Out[20]: 
array([[ 1.41421356, 0.  , 0.  , 0.  ], 
     [ 0.  , 2.  , 0.  , 0.  ], 
     [ 0.  , 0.  , 0.  , 0.  ], 
     [ 5.  , 0.  , 5.  , 0.  ]]) 
Verwandte Themen