我有一个由以下内容生成的数据结构(其中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或其他地方使用?
谢谢!
发布于 2018-05-01 02:44:32
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) https://stackoverflow.com/questions/50106019
复制相似问题