Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy数组(形状)的值错误_Python_Arrays_Python 2.7_Numpy_Valueerror - Fatal编程技术网

Python numpy数组(形状)的值错误

Python numpy数组(形状)的值错误,python,arrays,python-2.7,numpy,valueerror,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

在使用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
从打印行我得到这个输出:[9.99158529e-01-5.40302306e-04],所以它似乎工作正常。但是,我在y[I]行得到了这个错误:

我不知道为什么,因为我之前的打印语句基本上做了相同的事情,y[I]应该是相同的形状。有人知道问题出在哪里吗?

在打印行中,x/x_素数的第一个参数是标量1

在y[i]行中,您传递的是t,它是一个10000元素的数组,导致np.数组[x_primet,x_0,w,-w**2*xt,x_0,w]是一个210000矩阵,因此会产生ValueError

也许你想做的是:

y[i] = y[i-1] + np.array([x_prime(t[i], x_0, w), -w**2 * x(t[i], x_0, w)]) * h

不知道您的算法试图实现什么,但是您的算法似乎在一次迭代中使用了所有的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

因为我使用的是range而不是np.arange,所以请仔细查找定义,范围是0~int10/h。
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