2016-07-19 12 views
0

Hinweis zurück: Ich bin mit numpyPython: Funktionen von Arrays, die Arrays der gleichen Form

import numpy as np 

Bei 4-Arrays von der gleichen (aber beliebigen) Form, Ich versuche, eine Funktion, die Formen zu schreiben 2x2 Matrizen von jedem entsprechenden Element der Arrays, findet die Eigenwerte und gibt zwei Arrays der gleichen Form wie die ursprünglichen vier zurück, wobei seine Elemente Eigenwerte sind (dh die resultierenden Arrays würden die gleiche Form wie die Eingabe haben, wobei Array1 alle enthält) die ersten Eigenwerte und Array2, die alle zweiten Eigenwerte enthalten).

Ich habe versucht, das folgende zu tun, aber nicht überraschend, es gibt mir einen Fehler, der besagt, dass das Array nicht quadratisch ist.

temp = np.linalg.eig([[m1, m2],[m3, m4]])[0] 

Ich glaube, ich kann eine leere temporäre Variable in der gleichen Form machen,

temp = np.zeros_like(m1) 

und gehen über jedes Element der ursprünglichen Arrays und wiederholen Sie den Vorgang. Mein Problem ist, dass ich das für Arrays beliebiger Form verallgemeinern möchte (muss nicht eindimensional sein). Ich würde vermuten, dass das Finden der Form der Arrays und das Entwerfen von Loops, um über jedes Element zu gehen, keine sehr gute Möglichkeit wäre, dies zu tun. Wie mache ich das effizient?

Antwort

1

Konstruiere eine 2x2x ... Array:

temp = np.array([[m1, m2], [m3, m4]]) 

verschieben die ersten zwei Dimensionen an das Ende für ein ... x2x2 Array:

for _ in range(2): 
    temp = np.rollaxis(temp, 0, temp.ndim) 

np.linalg.eigvals Anruf für ein (was sendet) ... x2 Array von Eigenwerten:

eigvals = np.linalg.eigvals(temp) 

Und teilen Sie dies in eine Reihe von ersten Eigenwerten und ein Array von zweiten Eigenwerten:

eigvals1, eigvals2 = eigvals[..., 0], eigvals[..., 1] 
+0

Das hat perfekt funktioniert! Vielen Dank! – GoK

Verwandte Themen