我有一个(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()
答案 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)
也许?