【发布时间】:2020-09-24 17:59:59
【问题描述】:
我正在尝试使用 pylot 模拟一个简单的钟摆。为此,我创建了 Pendulum 类,并且在其中一种方法中,我不断收到相同的错误。
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 行,在 _wrapit 结果 = getattr(asarray(obj), 方法)(*args, **kwds)
TypeError: 只有整数标量数组可以转换为标量索引
进入引用的行,在一个名为“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 Pendulum.py”,第 86 行,在 动画(0)
文件“C:\Users\Lucas\Desktop\Estudos\Python\Simple Pendulum.py”,第 80 行,动画 line.set_data(pendulum.position())
文件“C:\Users\Lucas\Desktop\Estudos\Python\Simple Pendulum.py”,第 27 行,就位 x = np.cumsum(self.origin[0], L*np.sin(self.state[0]))
文件“array_function internals>”,第 6 行,在 cumsum 中
文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site-packages\numpy\core\fromnumeric.py”,第 2423 行,在 cumsum return _wrapfunc(a, 'cumsum', axis=axis, dtype=dtype, out=out)
文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site-packages\numpy\core\fromnumeric.py”,第 58 行,在 _wrapfunc return _wrapit(obj, 方法, *args, **kwds)
文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site-packages\numpy\core\fromnumeric.py”,第 47 行,在 _wrapit 结果 = getattr(asarray(obj), 方法)(*args, **kwds)
TypeError: 只有整数标量数组可以转换为标量索引
【问题讨论】:
-
有一个错字:
np.zero_lie应该是np.zeros_like -
请完整回溯。
-
就是这样,完整的追溯。此外,即使这里拼写错误(确实如此),我检查了实际代码,并没有拼写错误。