2016-11-29 107 views
0

我對Python和Numpy很陌生,所以我很抱歉如果我在這裏丟失了一些明顯的東西。Python Numpy錯誤:使用序列設置數組元素

我有2求解微分方程的系統功能:

import numpy as np 
import numpy.linalg as la 

def solve_ode(x0, a0, beta, t): 
    At = np.array([[0.23*t, (-10**5)*t], [0, -beta*t]], dtype=np.float32) 

    # get eigenvalues and eigenvectors 
    evals, V = la.eig(At) 
    Vi = la.inv(V) 

    # get e^At coeff 
    eAt = V @ np.exp(evals) @ Vi 

    xt = eAt*x0 
    return xt 

然而,與此代碼運行它:

import matplotlib.pyplot as plt 

# initial values 
x0 = 10**6 
a0 = 2.5 
beta = 0.05 

t = np.linspace(0, 3600, 360) 

plt.semilogy(t, solve_ode(x0, a0, beta, t)) 

...拋出這個錯誤:

ValueError: setting an array element with a sequence. 

在這一行:

At = np.array([[0.23*t, (-10**5)*t], [0, -beta*t]], dtype=np.float32) 

請注意,tbeta應該是floats。我認爲Python可能無法推斷出這一點,但我不知道該如何做到這一點......

Thx提前尋求幫助。

+0

如果** t **是標量**在**變爲2x2數組。現在的問題是,當您製作** t **數字列表時,Numpy不知道該做什麼。它不能用數組填充單元格。那就是爲什麼你會得到價值錯誤。 由於我不是一個物理/數學專業,我不知道如何適當的解決方案。爲每個** t **值運行solve_ode()的想法是什麼?或者應該**在**以特定方式成長? –

回答

1

您正在提供t作爲來自linspace的形狀爲360的numpy陣列,而不僅僅是一個浮動。結果At你嘗試創建的numpy數組然後生病,因爲所有的列必須是相同的長度。在Python中,列表和numpy數組之間存在着重要的區別。例如,你可以做你在這裏列出的清單,例如

At = [[0.23*t, (-10**5)*t], [0, -beta*t]] 

具有尺寸[[360×360]×[1×360]]。

替代地,如果在的所有元素都是t長度陣列將工作,

At = np.array([[0.23*t, (-10**5)*t], [t, -beta*t]], dtype=np.float32) 

具有形狀[2,2,360]。

+0

非常感謝!由於一些愚蠢的原因,我認爲scipy會遍歷t並將linspace中包含的每個值傳遞給我的函數。我現在明白了,非常感謝! – Scrashdown

1

當你給listlistlist A S,或在這種情況下,一個listlists小號list,個個應具有相同的長度,以使得numpy能自動推斷的尺寸(形狀)由此產生的矩陣。

在你的例子中,除了你放入的部分0作爲我猜。不知道該怎麼稱呼它,導致你的預期輸出是一個我想的立方體。

您可以通過爲波紋管給予零的正確數量的修復:

At = np.array([[0.23*t, (-10**5)*t], [np.zeros(len(t)), -beta*t]], dtype=np.float32) 

但檢查的結果數組的.shape,並確保它就是你想要的。

0

正如其他人注意到的問題是內部列表中的0。它不匹配由其他表達式生成的360長度數組。 np.array可以從那個(2x2)創建一個對象dtype數組,但不能創建一個浮點數。

At = np.array([[0.23*t, (-10**5)*t], [0*t, -beta*t]]) 

產生(2,2,360)陣列。但我懷疑,函數的其餘部分是圍繞假設建立了At是(2,2) - 二維方形陣列eiginv

什麼是迴歸xt應該是什麼?

這是行不通的?

S = np.array([solve_ode(x0, a0, beta, i) for i in t]) 

給出一個與t相同數量值的1d數組?

我並不是說這是解決問題的最快方法,但它是最簡單的,尤其是如果您只生成360個值。

相關問題