2016-07-19 64 views
0

注:我使用numpy的的Python:返回相同形狀的陣列陣列功能

import numpy as np 

鑑於4個陣列相同的(但任意)的形狀,我試圖寫一個函數形式從數組的每個相應元素中取出2×2矩陣,找出特徵值,並返回兩個與原始4相同形狀的數組,其元素是特徵值(即,得到的數組的形狀與輸入相同,array1保持全部第一個特徵值和第二個特徵值保持所有第二特徵值)。

我試着做了以下,但不出意外,它給了我一個錯誤,說數組不是正方形。

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

我想我可以使一個空的臨時變量中的形狀相同,

temp = np.zeros_like(m1) 

和越過原始陣列的每個元素和重複該過程。我的問題是,我想要這個泛化爲任意形狀的數組(不必是一維)。我猜想找到數組的形狀和設計循環來遍歷每個元素並不是一個很好的方法。我如何有效地做到這一點?

回答

1

構建2x2x ...陣列:

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

移動第一兩名維到端用於... x2x2數組:

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

呼叫np.linalg.eigvals(其廣播),用於... x2特徵值陣列:

eigvals = np.linalg.eigvals(temp) 

然後將其分成第一特徵值陣列和第二個特徵值的數組:

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

這工作完美!謝謝! – GoK