猿问

如何修复 numpy 数组中的“IndexError: only integers”?

我正在自学 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)

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


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


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


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


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


慕容708150
浏览 730回答 2
2回答

catspeake

您正在混合numpy和sympy,并且会出现问题:您的sympy导入定义i为一个符号(这对numpy用户来说并不明显):In [1]: from sympy.abc import *In [2]: iOut[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,可能是因为无知,也可能是因为*进口。
随时随地看视频慕课网APP

相关分类

Python
我要回答