gpt4 book ai didi

python - 剧情表现怪异

转载 作者:行者123 更新时间:2023-11-28 18:28:07 24 4
gpt4 key购买 nike

我正在尝试绘制一些 3D 轨迹。我注意到 plot 函数表现得很奇怪。

我定义了一个名为pos 的变量,它是一个二维矩阵。它有 3 列,其中每一列代表一个坐标轴。请查看下面的完整代码-

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

max = 1.0
min = -1.0
cols = 3
goals = 4
timesteps = 20

#pos = np.zeros((timesteps, cols)) # this doesn't works hence commented

fig = plt.figure()
ax = fig.gca(projection='3d')
for i in range(goals):
pos = np.zeros((timesteps, cols)) # this works as expected
for t in range(timesteps):
pos[t] = np.random.uniform(low=min, high=max, size=cols)
ax.plot(pos[:, 0], pos[:, 1], pos[:, 2])

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

pos 被全局定义时,情节不会画出任何东西。我注意到在 for 循环中定义 pos 可以解决问题。我觉得很奇怪。

下面是从全局 pos 变量生成的图(在注释 for 循环中定义的 pos 并保持全局 pos 变量已启用)- enter image description here

下面是从内部 pos 变量生成的图(在注释全局 pos 变量并保持 pos 定义在 for 循环启用)- enter image description here

这种行为的原因是什么?

最佳答案

修复

替换行

ax.plot(pos[:, 0], pos[:, 1], pos[:, 2])

ax.plot(list(pos[:, 0]), list(pos[:, 1]), list(pos[:, 2]))

并且它将按预期为全局 pos 工作。

解释

问题是 ax.plot(xlist, ylist, zlist) 不会立即绘制数据。它仅存储对 xlistylistzlist 的引用,并在 plt.show() 被调用。接下来,pos[:, 0]pos[:, 1]pos[:, 2]不返回对应的列按值(value)。相反,它们返回一些引用原始矩阵的代理对象。

因此,实际绘图是使用最后一次迭代后矩阵中的数据执行的,并且所有绘图都重合。通过将每个 pos[:, 0]pos[:, 1]pos[:, 2] 包装在一个 list() 我们强制复制列数据,将绘图彼此分离。

关于python - 剧情表现怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39726583/

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