0

我想绘制某个函数的轮廓,我的代码如下:

xlist = linspace(0, 100, 100)
ylist = linspace(0, 100, 200)
X, Y = meshgrid(xlist, ylist)
#print "X = " + str(X)
#print "Y = " + str(Y)
Z = power_at_each_point(X, Y)
#print "Z = " + str(Z)
figure()
CP2 = contourf(X, Y, Z)
colorbar(CP2)
title('Contour Plot')
xlabel('Room-x (m)')
ylabel('Room-y (m)')
show()

当我单独测试函数 power_at_each_point(X,Y) 时,我写道:

print power_at_each_point(50, 50)

输出是-80.9187477018

它基本上代表了房间内达到这一点的功率,它正常输出一个数字,但是当我在 meshgrid 命令之后调用它时,它返回一个错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我想获取房间 x-coord 和 y-coord 中点的每个坐标,并使用power_at_each_point应该返回一个数字的方法计算此时达到的功率,我将在轮廓图中表示它。

我的猜测是 Z = power_at_each_point 的参数 (X,Y) 从只是数字变成了我不想要的数组,这就是导致错误的原因。如何让函数 Z = power_at_each_point(X,Y) 将 X 作为参数作为数字 ex :1 和 Y ex :2 并返回此时的功率值,以便我可以在轮廓图中表示它。

任何帮助,将不胜感激。

4

1 回答 1

0

我发现该函数meshgrid需要一个矩阵作为参数,所以我继续创建了一个名为 Z 的矩阵,我自己填充了其中的值,然后我继续输入 Z 作为meshgrid函数的参数:

x_list = linspace(0, 100, 100)
y_list = linspace(0, 100, 100)
X, Y = meshgrid(x_list, y_list)

Z = [[0 for x in range(len(x_list))] for x in range(len(y_list))]
for each_axes in range(len(Z)):
    for each_point in range(len(Z[each_axes])):
        Z[each_axes][each_point] = power_at_each_point(each_axes, each_point)

figure()
CP2 = contourf(X, Y, Z)

就我在这里问的而言,这让我得到了我想要的结果。这些点在 Z 矩阵中反转,或者您可以说沿水平方向镜像,但这是我要玩的东西,以便我可以在 Z 中获取这些元素以匹配网格网格实际设置它的网格点的方式。

于 2015-05-04T14:31:32.527 回答