首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从嵌套字典开发matplotlib表面

从嵌套字典开发matplotlib表面
EN

Stack Overflow用户
提问于 2018-05-01 02:15:03
回答 1查看 46关注 0票数 1

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

代码语言:javascript
复制
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)]

这会产生如下的数据结构:

代码语言:javascript
复制
{i1 : {j1 : {k1 : [func1_val, func2_val], ...}, ...}, ...}

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

代码语言:javascript
复制
for given i1:
    x-axis = j
    y-axis = k
    z-axis = func1_val

代码语言:javascript
复制
for given k1:
    x-axis = i
    y-axis = j
    z-axis = func2_val

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-05-01 02:44:32

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

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

代码语言:javascript
复制
mesh1, mesh2, mesh3 = np.meshgrid(var1, var2, var3)

它将定义3个3d阵列,它们可以很容易地用作matplotlib曲面图的输入。

然后,函数可以是没有循环的调用,操作将直接按元素执行。即

代码语言:javascript
复制
res1 = func1(mesh1,  mesh2, mesh3) 

并最终使用类似于此伪代码的代码进行绘图:

代码语言:javascript
复制
for i in var1:
    plt.plot_surface(mesh2[i,:,:], mesh3[i,:,:], res1[i,:,:]) 

然而,在非常大的数组的情况下,创建3d网格可能会消耗太多的内存。因此,构建2d网格并在第三个网格上循环可能是一个更好的想法。其中一个示例是:

代码语言:javascript
复制
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) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50106019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档