Python 为什么我会得到这个信息;类型错误:';复杂';对象不可下标";当试图在np.sum中使用复数时?

Python 为什么我会得到这个信息;类型错误:';复杂';对象不可下标";当试图在np.sum中使用复数时?,python,Python,我正试图为一个包含复数的方程编写代码,并将其放入辛普森规则的函数中 import numpy as np import cmath as cmp import matplotlib.pyplot as plt wavelength = 0.000001 #meters Apw = 0.00002 # meters Apw taken as apeture width z = 0.02 # meters N = 100 permittivity = 0.00000000000885418783

我正试图为一个包含复数的方程编写代码,并将其放入辛普森规则的函数中

import numpy as np
import cmath as cmp
import matplotlib.pyplot as plt

wavelength = 0.000001 #meters
Apw = 0.00002 # meters Apw taken as apeture width
z = 0.02 # meters
N = 100
permittivity = 0.00000000000885418783
c =  299792458 # m/s
k = (2*cmp.pi)/wavelength
j = 0 + 1j
n = 100



x = np.linspace(-0.005, 0.005, n, 1.1)

def simps (N, k, Apw, x):
  S = 0
  h = Apw / N
  for i in range(0, N + 1):
    for xprime in range(0, N+1):
        xprime = Apw*xprime/N
        f =  cmp.exp(((j*k)/(2*z))*(x-xprime)**2)
    if (i != 0) and (i != n):
      f *= (2 + (2 * (i % 2)))
    S = h/3 * np.sum(f[0:-1:2] + 4*f[1::2] + f[2::2])
  return S

x = np.linspace(-0.005, 0.005, n, 1.1)

I = np.zeros([n])

for i in range(0,n):


    E_0 = simps(N, k, Apw, x[i])[0]
    I[i] = permittivity*c*(E_0 * cmp.conj(E_0)).real
其中j是复数j=0+1j
我真的不知道我所做的是否接近正确,导致错误的行是代码中的第46行和第36行,
f
是一个复数。正如错误消息所说,您可以在复数下标(使用方括号)。因此,表达式
f[0:-1:2]
f[1::2]
f[2::2]
是产生此错误的非法操作。似乎您认为
f
是一个复杂值列表,而不是一个单一值


如果您确实知道
f
是一个单复数值,那么我能想到的唯一操作就是用
f.real
f.imag

提取实部和虚部。请添加整个堆栈跟踪,以及调用
simps
时使用的值,这使它更容易理解:)什么是
f
?最直截了当的答案是,它是一个复数,它是不可下标的,正如你所得到的错误所说的那样。请提供您得到的错误的完整堆栈跟踪,并让我们知道您的源代码的哪一行是导致错误的原因(因为您的代码中没有行号)。对不起,这是我第一次使用它,我是python新手,我的大学没有提供python的适当教学,基本上希望我们已经理解它。“导致错误的行是第46行和第36行”对阅读您的问题的人没有太大帮助。这些行号仅在IDE的上下文中有直接意义。您在
f[1::2]
后面的意图不清楚,因此您的问题很难回答。您希望
f[1::2]得到什么
to be?这应该是复数的实部吗?