numpy数组(形状)的值错误

时间:2018-04-23 21:55:01

标签: python arrays python-2.7 numpy valueerror

我在使用numpy数组时一直得到一个ValueError,我无法弄清楚是什么导致它,因为它似乎在我的for循环之外正常工作。这是我的代码:

import numpy as np

def x(t, x_0, w):
    return x_0*np.cos(w*t)
def x_prime(t, x_0, w):
    return -x_0*w*np.sin(w*t)

w = 1
x_0 = 1
h = 0.001
t = np.arange(0, 10, h)
y = np.array([[0, 0]]*len(t))

y[0] = [x_0, 0]
# The line below works correctly, but not inside my loop
print np.array([x_prime(1, x_0, w), -w**2 * x(1, x_0, w)])*h + y[0]
for i in range(1, len(t)):
    # Euler's method
    y[i] = y[i-1] + np.array([x_prime(t, x_0, w), -w**2 * x(t, x_0, w)]) * h

print行我得到此输出:[ 9.99158529e-01 -5.40302306e-04],因此似乎正常工作。但是,我在y[i]行收到此错误:

ValueError: operands could not be broadcast together with shapes (2,) (2,10000)

我不知道为什么,因为我之前的print语句基本上是做同样的事情,y[i]应该是相同的形状。有谁知道问题是什么?

2 个答案:

答案 0 :(得分:1)

print行中,x() / x_prime()的第一个参数是标量(1)。

y[i]行中,您传递了t,这是一个10000元素的数组,导致np.array([x_prime(t, x_0, w), -w**2 * x(t, x_0, w)])为(2,10000)矩阵,因此{{1} }。

也许您想要做的是:

ValueError

答案 1 :(得分:0)

不知道你的算法试图实现什么,但你似乎在一次迭代中使用了所有t,也许我的改变可以帮助你。     导入numpy为np

def x(t, x_0, w):
    return x_0*np.cos(w*t)
def x_prime(t, x_0, w):
    return -x_0*w*np.sin(w*t)

w = 1
x_0 = 1
h = 0.001
t = range(0, int(10/h))
y = np.array([[0, 0]]*len(t))

y[0,0] = x_0
y[0,1] = 0
# The line below works correctly, but not inside my loop
print(np.array([x_prime(1, x_0, w), -w**2 * x(1, x_0, w)])*h + y[0])
for i in range(1, len(t)):
    # Euler's method
    y[i] = y[i-1] + np.array([x_prime(t[i]*h, x_0, w), -w**2 * x(t[i]*h, x_0, w)]) * h