Python:包含多个元素的数组的真值是不明确的。使用a.any()或a.all()
我有一个函数,我需要对一系列参数进行计算和可视化 以下是Jupyter代码的一个示例:Python:包含多个元素的数组的真值是不明确的。使用a.any()或a.all(),python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一个函数,我需要对一系列参数进行计算和可视化 以下是Jupyter代码的一个示例: %pylab %matplotlib inline %matplotlib notebook import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt from matplotlib import cm from matplotlib.ticker import LinearLoca
%pylab
%matplotlib inline
%matplotlib notebook
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
def testFunc(x):
a = x[0] - x[1]
#if a < 0:
# a = 0
b = 2*(a**3)
return b
X = np.arange(100, 10000, 10)
Y = np.arange(3600, 3900, 10)
X, Y = np.meshgrid(X, Y)
Z = testFunc([X, Y])
fig = plt.figure(figsize=(12,8))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
%pylab
%matplotlib内联
%matplotlib笔记本
将numpy作为np导入
从mpl_toolkits.mplot3d导入Axes3D
将matplotlib.pyplot作为plt导入
从matplotlib导入cm
从matplotlib.ticker导入LinearLocator,FormatStrFormatter
def testFunc(x):
a=x[0]-x[1]
#如果a<0:
#a=0
b=2*(a**3)
返回b
X=np.arange(100,10000,10)
Y=np.arange(36003900,10)
十、 Y=np.meshgrid(X,Y)
Z=testFunc([X,Y])
图=plt.图(图尺寸=(12,8))
ax=图gca(投影=3d')
surf=最大绘图曲面(X,Y,Z,cmap=厘米冷温)
图颜色条(表面,收缩=0.5,纵横比=5)
plt.show()
它工作得很好:
但是我需要为函数添加一个附加逻辑:
if a < 0:
a = 0
如果a<0:
a=0
当我取消注释这些行时,我得到了错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-273b40ed507a> in <module>()
20 Y = np.arange(3600, 3900, 10)
21 X, Y = np.meshgrid(X, Y)
---> 22 Z = testFunc([X, Y])
23
24 fig = plt.figure(figsize=(12,8))
<ipython-input-15-273b40ed507a> in testFunc(x)
11 a = x[0] - x[1]
12
---> 13 if a < 0:
14 a = 0
15
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
20 Y=np.arange(36003900,10)
21 X,Y=np.网格(X,Y)
--->22 Z=testFunc([X,Y])
23
24图=零件图(图尺寸=(12,8))
在testFunc(x)中
11a=x[0]-x[1]
12
--->13如果a<0:
14A=0
15
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
函数是否在“a”中应用值数组?因此,它不知道将哪个项与“0”进行比较
你能推荐一种计算函数的好方法吗
属性范围(有可能可视化)
有几个选项:这里有2个(注释您不想使用的选项):
def testFunc(x):
a=x[0]-x[1]
#备选案文1:
a[a那么,X
和Y
是数组。当您将数组数组传递给testFunc
时,a
也是数组。您需要比较a
的元素,检查它们是否小于0,然后将它们设置为0(例如,使用for
循环)你的另一个问题可能重复,这是隐藏的,几乎不明显的,也是重复的-使用a[aOh,你17小时前就回答了那篇帖子!今天是你的日子:)谢谢,去那里读你的答案……是的,真的很幸运,否则我永远也不会找到一个重复的——标题有误导性,所以你的帖子是一个很好的路标。谢谢!我对此有所怀疑。但我认为“Z=testFunc([X,Y])调用testFunc()对于每一对值,而不是整个数组。没问题,祝您愉快
def testFunc(x):
a = x[0] - x[1]
# option 1:
a[a<0] = 0
# option 2
a = np.clip(a,0,np.inf)
b = 2*(a**3)
return b