gpt4 book ai didi

python - 从嵌套字典开发 matplotlib 曲面

转载 作者:行者123 更新时间:2023-12-01 09:29:14 27 4
gpt4 key购买 nike

我有一个由以下内容生成的数据结构(其中 [a] func1 和 func2 是占位符函数,[b] i1 等是占位符变量值):

def func1(x,y,z):
return x+y/z

def func2(x,y,z):
return x/y+z

var1 = [i1, i2, ..., i]
var2 = [j1, j2, ..., j]
var3 = [k1, k2, ..., k]

data_bin = {}

for i in var1:
data_bin[i] = {}

for j in var2:
data_bin[i][j] = {}

for k in var3:
data_bin[i][j][k] = [func1(i,j,k), func2(i,j,k)]

这会产生如下数据结构:

{i1 : {j1 : {k1 : [func1_val, func2_val], ...}, ...}, ...}

我正在尝试创建像这样的图(伪代码)

for given i1:
x-axis = j
y-axis = k
z-axis = func1_val

for given k1:
x-axis = i
y-axis = j
z-axis = func2_val

如何循环遍历字典,以便将这些值提取到工作箱中以在 matplotlib 或其他东西中使用?

谢谢!

最佳答案

进行 matplotlib 绘图的标准方法是将数据存储在 numpy 数组中。

在本例中,您可以定义一个网格:

mesh1, mesh2, mesh3 = np.meshgrid(var1, var2, var3)

这将定义 3 个 3d 数组,这些数组可以很容易地用作 matplotlib 曲面图的输入。

然后,可以不循环调用该函数,并且直接按元素执行操作。即

res1 = func1(mesh1,  mesh2, mesh3) 

最终使用类似于此伪代码的代码绘制绘图:

for i in var1:
plt.plot_surface(mesh2[i,:,:], mesh3[i,:,:], res1[i,:,:])

然而,在数组非常大的情况下,创建 3d 网格可能会过于消耗内存。因此,构建 2d 网格并循环第三个网格可能是更好的主意。一个例子是:

mesh2, mesh3 = np.meshgrid(var2, var3) # it can be defined outside because only var1 varies during the loop
for i in var1:
res1 = func1(i,mesh2,mesh3)
plt.plot_surface(mesh2, mesh3, res1)

关于python - 从嵌套字典开发 matplotlib 曲面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50106019/

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