首页 > 解决方案 > 如何修复 numpy 数组中的“IndexError:仅整数”?

问题描述

(已解决。请参阅下面的答案)我正在自学 Python 以准备学校项目。我遇到了以下错误,我无法弄清楚如何解决:

IndexError:只有整数、切片 ( :)、省略号 ( ...)、numpy.newaxis ( None) 和整数或布尔数组是有效的索引

这是我要运行的代码(根据评论对其进行了一些编辑)

from sympy import *
from sympy.abc import i
from mpmath import *
import numpy as np
np.set_printoptions(suppress=True)

N = 3
M = np.zeros(shape=(N, N))
for n in range(0, N):
    M[0, n] = fac(n)    # mpmath.fac
for m in range(1, N):
    for n in range(0, N):
        M[m, n] = (Sum(M[m - 1, i], (i, 0, n + 1))) / (n+1) 
print(M)

本质上,我想指定数组的维度和数组的第一行。然后我想以某种方式构造数组中的剩余条目(如果您了解该求和技术,则持有者求和性)。

我已经查看了堆栈溢出中出现此特定错误的各种其他问题,但这些问题超出了我目前的知识范围,或者没有完全解决我的问题。我已经修改了许多参数并将问题隔离到第 13 行。特别是,一旦我将“i”放入 M[m-1,i] 中,我就会收到错误。如果我输入任何小于尺寸的数字而不是“i”,我的代码就会运行,但这不是我需要的结构。

例如,条目M[2,1]应构造为:

M[2,1] = (M[1,0] + M[1,1]) / 2

我认为这与我写的总和相对应。我的索引是如何变成非正整数的?

谢谢!

标签: pythonnumpysympy

解决方案


您正在混合numpyand sympy,它会出现问题:

您的sympy导入定义i为一个符号(这对numpy用户来说并不明显):

In [1]: from sympy.abc import *
In [2]: i
Out[2]: i

然后你定义一个numpy数组。(import numpy as np优于*):

In [3]: M=np.zeros((3,3))

尝试将其i用作索引会引发错误:

In [4]: M[1,i]
------------------------------------------------------------------
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

符号可能在sympy矩阵中起作用,但在索引 numpy 数组时不起作用。

Ms = sy.zeros(3,3)      # sympy matrix  
for m in range(1,3):
    for n in range(3):
        Ms[m,n] = (sy.Sum(Ms[m-1,i],(i,0,n+1)))/(n+1)

这会运行,尽管结果Ms没有多大意义。

所以问题的根源是你混合了numpy和sympy,可能是因为无知,也可能是因为*进口。


推荐阅读