【问题标题】:Value error: Setting an array element to sequence using numpy and Bessel functions值错误:使用 numpy 和 Bessel 函数将数组元素设置为序列
【发布时间】:2015-11-16 19:29:03
【问题描述】:

我一直在尝试解决值错误(将数组元素设置为序列),但我尝试的任何方法都无法纠正问题。代码围绕使用第一类贝塞尔函数并将它们与jv(v,z) 函数进行比较,但a[k] = B1(theta[k]) 的行导致了我的错误。我只使用 Python 3 编码大约 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(theta[k]) ValueError: 使用序列设置数组元素。

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

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

我不确定为什么,但我输入的任何值都是这样;

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

产生这个错误。但是我不知道有什么解决方案可以纠正这个问题。

【问题讨论】:

  • 发布完整的回溯会有所帮助,但从错误中很明显,您应该检查设置数组元素的行(a[k] =b[k] =)。检查这些赋值的 RHS,看看表达式是否实际上是一个序列(数组)而不是一个数字。
  • 你为什么要b = a?现在b 指的是a 指的同一个对象。这可能不是您的问题的原因,但肯定不是您打算做的。
  • 设置第二个数组以在程序中使用只是个人喜好。过去它对我有用,所以我坚持下去。
  • @Krios101,你不应该那样做。一旦你执行a[k] = something 然后b[k] = something_else,你实际上覆盖了你放入a[k] 的任何内容。

标签: python arrays python-3.x numpy


【解决方案1】:

我记得,贝塞尔函数只为正参数定义。也许您正在传递一个导致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

此外,您应该发布您的堆栈跟踪(错误说明了什么),这将有助于我和其他人调试。

【讨论】:

  • 这是我从终端 Traceback 得到的回溯错误(最近一次调用最后一次):文件“Ag1P1.py”,第 29 行,在 a[k] = B1(theta[k ]) ValueError:使用序列设置数组元素。我之前尝试过打印值类型,当在 a[k] 调用 B1 时,它表示返回的值 (j1) 是之前让我感到困惑的数组值。断言函数是否类似于 if 语句的退出条件?
猜你喜欢
  • 2018-11-10
  • 2018-04-09
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 2018-12-30
相关资源
最近更新 更多