Python 值错误:使用numpy和Bessel函数将数组元素设置为序列

Python 值错误:使用numpy和Bessel函数将数组元素设置为序列,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,我一直在尝试解决一个值错误(将数组元素设置为序列),但我尝试的任何方法都无法纠正这个问题。代码使用第一类贝塞尔函数,并将它们与jv(v,z)函数进行比较,但是a[k]=B1(θ[k])这一行导致了我的错误。我用Python3编写代码才6周左右,所以我对这方面还是相当陌生的 编辑的缩进 import numpy as np import scipy import pylab as plt from numpy import pi from scipy import integrate from s

我一直在尝试解决一个值错误(将数组元素设置为序列),但我尝试的任何方法都无法纠正这个问题。代码使用第一类贝塞尔函数,并将它们与
jv(v,z)
函数进行比较,但是
a[k]=B1(θ[k])
这一行导致了我的错误。我用Python3编写代码才6周左右,所以我对这方面还是相当陌生的

编辑的缩进

import numpy as np
import scipy
import pylab as plt
from numpy import pi
from scipy import integrate
from scipy import special
from numpy import cos
from numpy import sin

x = 1.0
def B1(theta):
  j1 = cos(theta-x*sin(theta))
  return (j1)

theta = np.linspace(0.0, 20.0, 1000)
a = np.linspace(0.0, 20.0, 1000)
b = a
r = np.linspace(0.0e-6, 1.0e-6, 1000)
x = np.linspace(-1.0, 1.0, 1000)
y = x
Ij = (1.0/pi)*integrate.simps(B1(theta), theta)

for k in range(0, len(theta)):
  if k>0: 
    a[k] = B1(theta[k])
    b[k] = scipy.special.jv(1, theta[k])
  else:
    a[k] = 1.0
    b[k] = 1.0
plt.plot(theta, a,'r-')
plt.plot(theta, b,'k-')
plt.show() 
任何人的任何帮助都将不胜感激,因为我已经为此奋斗了几个小时了

编辑:作为参考,我的跟踪日志如下 文件“Ag1P1.py”,第32行,在 a[k]=B1(θ[k]) ValueError:使用序列设置数组元素

我认为现在我的错误在于我使用了以下内容

     x = 1.0
    def B1(theta):
      j1 = cos(theta-x*sin(theta))
      return(j1)
我不确定为什么,但我输入的任何值都是这样

      a[k] = B1(theta[k])

产生此错误。然而,我不知道有什么解决办法来纠正这个问题。

我记得,贝塞尔函数只为正参数定义。可能您正在传递一个负参数,导致出现
ValueError
。我建议添加这样的断言作为调试手段

for k in range(0, len(theta)):
  if k>0: 
    assert theta[k] > 0
    a[k] = B1(theta[k])
    b[k] = scipy.special.jv(1, theta[k])
  else:
    a[k] = 1.0
    b[k] = 1.0

另外,您应该发布stacktrace(错误确切地说是什么),这将帮助我和其他人进行调试

发布完整的回溯将有所帮助,但从错误中可以明显看出,您应该检查设置数组元素的行(
a[k]=
b[k]=
)。检查这些赋值的RHS,查看表达式是否实际上是序列(数组)而不是数字。为什么要执行
b=a
?现在
b
引用的对象与
a
引用的对象相同。这可能不是您问题的原因,但肯定不是您打算做的事情。这只是个人偏好,需要设置第二个数组以用于程序中。在过去,它对我很有效,所以我坚持它。@Krios101,你不应该这样做。一旦你做了
a[k]=something
,然后又做了
b[k]=something
,你实际上是在覆盖你放入
a[k]
中的任何内容。下面是我从终端回溯中得到的回溯错误(最后一次调用):文件“Ag1P1.py”,第29行,在a[k]=B1(θ[k])ValueError:使用序列设置数组元素。我以前试过打印值类型,当在[k]处调用B1时,它指出返回的值(j1)是数组值,这让我之前感到困惑。断言函数是否类似于if语句的退出条件?