当前位置: 首页 > 知识库问答 >
问题:

Python Numpy错误:只有整数标量数组可以转换为标量索引

楚弘益
2023-03-14

我试着用pylot来模拟单摆。为此,我创建了类钟摆,在其中一个方法中,我不断得到相同的错误。

def __init__(self, L = 1, M = 1, G = 9.8, origin = (0, 0), init = [60, 0]):
    self.init_state = np.array(init, dtype = 'float')
    self.params = (L, M, G)
    self.origin = origin
    self.time = 0
    self.state = self.init_state * (np.pi/180.)

def dstate_dt(self, state, t):
    """compute the derivative of the given state"""
    (L, M, G) = self.params

    dydx = np.zero_lie(state)
    dydx[0] = state[1]
    dydx[1] = -(G/L)*np.sin(state[0])

    return dydx

错误代码为:

文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site packages\numpy\core\fromnumeric.py”,第47行,在_wrapitresult=getattr(asarray(obj),method)中(*args,**kwds)

只有整数标量数组可以转换为标量索引

进入参考行,在一个名为fromnumeric.pi的文件夹中,给定的函数如下:

def _wrapit(obj, method, *args, **kwds):
try:
    wrap = obj.__array_wrap__
except AttributeError:
    wrap = None
result = getattr(asarray(obj), method)(*args, **kwds)
if wrap:
    if not isinstance(result, mu.ndarray):
        result = asarray(result)
    result = wrap(result)
return result

是什么触发了此错误?我如何修复它?完整回溯如下:

文件“C:\Users\Lucas\Desktop\Estudos\Python\Simple be摆.py”,第86行,动画(0)

文件"C:\用户\卢卡斯\桌面\Estudos\Python\简单Pendulum.py",第80行,在动画line.set_data(pendulum.position())

文件“C:\用户\卢卡斯\桌面\Estudos\Python\简单endulum.py”,第27行,位置x=np.cumsum(self.origin[0],L*np.sin(self.state[0])

文件“

文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site packages\numpy\core\fromneric.py”,第2423行,在累积和返回函数中(a,'cumsum',axis=axis,dtype=dtype,out=out)

文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site packages\numpy\core\fromneric.py”,第58行,在_wrapfuncreturn _wrapit中(obj,method,*args,**kwds)

文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site packages\numpy\core\fromnumeric.py”,第47行,在_wrapitresult=getattr(asarray(obj),method)中(*args,**kwds)

只有整数标量数组可以转换为标量索引

共有1个答案

茅曾琪
2023-03-14

回溯显示错误发生在这一行(来自您的代码)

File "C:\Users\Lucas\Desktop\Estudos\Python\Simple Pendulum.py", line 27, in 
position x = np.cumsum(self.origin[0], L*np.sin(self.state[0]))

我没有看到在您的代码示例中使用累积!发布的方法根本不会出现在回溯中。

您传递两个参数

self.origin[0]
L*np.sin(self.state[0]

但是如果您花时间检查文档中的cumsum,您将看到:

numpy.cumsum(a, axis=None, dtype=None, out=None)[source]

它接受一个数组参数a。第二个参数是轴,它只能是一个标量,一个数字。这就是我抱怨的错误!

我不能建议一个修复,因为我不知道你打算用累积调用。

 类似资料: