2013-04-11 169 views
1

我有一個數組是(219812,2),但我需要分割爲2 (219812)在Python中分割數組

我不斷收到錯誤ValueError: operands could not be broadcast together with shapes (219812,2) (219812)

我怎樣才能做到?你可以看到,我需要從u = odeint中取出兩個單獨的解決方案,並將它們複合。

def deriv(u, t): 
    return array([ u[1], u[0] - np.sqrt(u[0]) ]) 

time = np.arange(0.01, 7 * np.pi, 0.0001) 
uinit = array([ 1.49907, 0]) 
u = odeint(deriv, uinit, time) 

x = 1/u * np.cos(time) 
y = 1/u * np.sin(time) 

plot(x, y) 
plt.show() 

回答

3

要提取二維數組的第i列,請使用arr[:, i]

您也可以使用u1, u2 = u.T對數組進行解壓縮(它的工作方式是明智的,所以您需要轉置u以使其具有形狀(2,n))。

順便說一句,星進口並不大(可能除了在終端交互使用),所以我加了幾個np.plt.你的代碼,這成爲:

def deriv(u, t): 
    return np.array([ u[1], u[0] - np.sqrt(u[0]) ]) 

time = np.arange(0.01, 7 * np.pi, 0.0001) 
uinit = np.array([ 1.49907, 0]) 
u = odeint(deriv, uinit, time) 

x = 1/u[:, 0] * np.cos(time) 
y = 1/u[:, 1] * np.sin(time) 

plt.plot(x, y) 
plt.show() 

它還看起來像一個對數陰謀看起來更好。

+0

得到它的陰謀,但情節是錯誤的。 – dustin 2013-04-11 16:59:28

+1

@dustin確保你沒有計算/繪製其他東西。這顯示瞭如何「分割」一個數組,我認爲這可以回答你的問題。沒有更多信息,我們將無法幫助您解決您的其他問題。 – jorgeca 2013-04-11 17:15:41

+1

@dustin你想'plt.plot(time,u [:,0])'? – jorgeca 2013-04-11 17:31:57

1

這聽起來像你想索引的元組:

foo = (123, 456) 
bar = foo[0] # sets bar to 123 
baz = foo[1] # sets baz to 456 

所以你的情況,這聽起來像你想要做的可能是什麼?

u = odeint(deriv, uinit, time) 

x = 1/u[0] * np.cos(time) 
y = 1/u[1] * np.sin(time) 
+0

返回相同的錯誤我得到:'ValueError:操作數不能與形狀一起廣播(2)(219812)' – dustin 2013-04-11 15:58:02

+1

在原始帖子中提及該錯誤將是有用的。 – Amber 2013-04-11 16:01:50

1
u1,u2 = odeint(deriv, uinit, time) 

也許?

+0

我給出的錯誤'太多的值解包'與此。 – dustin 2013-04-11 16:01:44

+2

@dustin然後嘗試'u1,u2 = odeint(deriv,uinit,time).T'。 – Jaime 2013-04-11 16:56:37