在Python中分割一个数组

iaut 发布于 2019-03-09 arrays 最后更新 2019-03-09 14:31 2 浏览

我有一个数组是(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()
已邀请:

psed

赞同来自:

要提取2D数组的第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()
看起来似乎对数图看起来更好。

caut

赞同来自:

听起来你想要索引元组:

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)

eut

赞同来自:

u1,u2 = odeint(deriv, uinit, time)
也许 ?