【问题标题】:Python numpy error: only integer scalar arrays can be converted to a scalar indexPython numpy 错误:只能将整数标量数组转换为标量索引
【发布时间】: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
  • 请完整回溯。
  • 就是这样,完整的追溯。此外,即使这里拼写错误(确实如此),我检查了实际代码,并没有拼写错误。

标签: python numpy


【解决方案1】:

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

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]))

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

你传递cumsum两个参数

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

但如果您花时间查看cumsum 的文档,您会看到:

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

它需要一个数组参数a。第二个参数是axis,只能是标量,单个数字。这就是抱怨的错误!

我无法提出修复建议,因为我不知道您拨打 cumsum 的意图。

【讨论】:

  • 你是对的。我在使用 cumsum 的地方修复了这个问题,错误消失了。非常感谢!
猜你喜欢
  • 2018-09-27
  • 2020-04-30
  • 2020-07-23
  • 1970-01-01
  • 2021-07-15
  • 2020-09-16
  • 2021-10-31
  • 2018-05-29
  • 2018-05-03
相关资源
最近更新 更多