1

我有一个数组,(219812,2)但我需要拆分为2 (219812).

我不断收到错误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()
4

3 回答 3

3

要提取二维数组的第 i 列,请使用arr[:, i].

您还可以u使用u1, u2 = u.T.

顺便说一句,星形导入不是很好(可能在终端中用于交互使用除外),所以我在您的代码中添加了几个np.and 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()

对数图看起来也更好。

于 2013-04-11T16:36:04.260 回答
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)
于 2013-04-11T15:56:03.437 回答
1
u1,u2 = odeint(deriv, uinit, time)

也许 ?

于 2013-04-11T15:59:35.937 回答