gpt4 book ai didi

python - 轴3D : Numpy arrays error while trying to build 3D plot

转载 作者:行者123 更新时间:2023-12-03 15:46:17 24 4
gpt4 key购买 nike

让我们从头开始。这就是我得到 x 的方式和 y值(value)观:

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d') # get current axis

w0 = np.arange(30, 80, 1) # x - values
w1 = np.arange(-3, 3, 0.1) # y - values

X, Y = np.meshgrid(w0, w1) # no idea why to do that

因为我不知道如何避免循环,所以我用这种方式计算 Z 值:
    sizeWo = len(w0)
sizeW1 = len(w1)
Z = np.zeros((sizeWo, sizeW1))

for i in xrange(0,sizeWo):
for j in xrange(0,sizeW1):
Z[i,j] = errorLose(w0[i], w1[j])

surf = ax.plot_surface(X, Y, Z) # that lines generates the error (ValueError: shape mismatch: objects cannot be broadcast to a single shape)

即使此代码也会产生相同的错误:
surf = ax.plot_surface(w0, w1, Z) shape mismatch: objects cannot be broadcast to a single shape
plt.show()

这里有什么问题以及如何使其工作?
errorLose函数接受两个值并使用数据框计算误差 data在后面:
def errorLose(w0,w1):
return np.sum((data.Height - (w0 + w1 *data.Weight))**2)

这就是您可以获取相同数据的方式。这是 csv file 的链接:
data = pd.read_csv('weights_heights.csv', index_col='Index')

最佳答案

你很亲密。问题是您正在创建 Z成为 sizeWo x sizeW1但是 meshgrid创建 XY大小为 sizeW1 x sizeW0 .您可以设置 Z不同:

Z = np.zeros((sizeW1, sizeWo))

for i in xrange(0,sizeWo):
for j in xrange(0,sizeW1):
Z[j,i] = errorLose(w0[i], w1[j])

或者你可以保留 Z相同,只需传递 Z 的转置到你的情节构造函数
surf = ax.plot_surface(X, Y, np.transpose(Z))

更新

需要使用 meshgrid的原因是您的 x 和 y 坐标最初只是一维数组和 plot_surface预计 XY成为二维数组。什么 meshgrid确实是它从两个输入中创建了二维数组,其中每个输入都有两个排列。 This answer包含对 meshgrid 的更详细讨论.

关于python - 轴3D : Numpy arrays error while trying to build 3D plot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36668771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com