在Python中拆分数组

时间:2013-04-11 15:50:57

标签: python arrays numpy

我有一个(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()

3 个答案:

答案 0 :(得分:3)

要提取2D数组的第i列,请使用arr[:, i]

您也可以解压缩数组(它按行方式工作,因此您需要使用u转置u1, u2 = u.T以使其具有形状(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()

看起来似乎对数图看起来更好。

答案 1 :(得分: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)

答案 2 :(得分:1)

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

也许?