首页 > 解决方案 > 即使我没有使用数组,Python3 也会触发数组错误。可能我的语法错误,但我没有找到错误

问题描述

嗨,我已经为我的物理研究编写了一些代码,而且我对 python 还很陌生。

有人可以向我解释为什么

[code]while s < 3.05 and t < 1e-7 :[/code]

触发器

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

我用谷歌搜索了一段时间并搜索了堆栈,但我不知道问题是什么。

标签: python-3.xnumpymatplotlib

解决方案


当我复制粘贴代码时(谢天谢地)并产生错误消息:

1231:~/mypy$ python3 stack53381357.py 
Traceback (most recent call last):
  File "stack53381357.py", line 105, in <module>
    Z = Ek(X, Y)
  File "stack53381357.py", line 67, in Ek
    while s < 3.05 and t < 1e-7 :
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

请注意,完整的消息确实告诉我们问题出在哪里 - 在第Ek67 行的函数中。这是相关信息。

这证实了我的评论 -Ek使用数组参数调用,并通过循环传播,更改s为数组。

当我在Ek循环末尾添加打印时:

    print(type(s), s.shape)

我得到,在错误之前:

<class 'numpy.ndarray'> (100, 100)

所以,是的,s已经从一个标量变成了一个numpy数组,形状XY你传递给的数组一样Ek

您的 3 个函数似乎是为标量输入编写的。我不会试图弄清楚它们应该如何处理meshgrid输入。您可以遍历paandEa元素。或者您可以修改函数,以便它们在给定数组值时表现。最起码

while (s<3.05) and (t<1e-7):

s当是一个数组时,必须写成有意义的。数组输入可能还有其他问题。


推荐阅读