Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:包含多个元素的数组的真值是不明确的。使用a.any()或a.all()_Python_Numpy_Matplotlib - Fatal编程技术网

Python:包含多个元素的数组的真值是不明确的。使用a.any()或a.all()

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

我有一个函数,我需要对一系列参数进行计算和可视化

以下是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 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