首页 > 解决方案 > 以灵活的方式在python中实现Matlab结构

问题描述

我想在 python 中实现一个像 Matlab 结构一样灵活的结构。我已经查看了 Python 中的 Matlab 结构 [重复],但不同之处在于我想要一个灵活的结构,其中字段名称和结构的深度是事先不知道的。因此,例如在 Matlab 中,您可以说:

parent.child1.grandchild1=2
parent.child1.grandchild2=3
parent.child2.grandchild1.grand-grandchild1=1

无需使用字段名称初始化 thet 结构。我想实现一个结构,只要用户(不习惯 python)想要将测量值存储在他正在使用的结构中,就可以调用该结构。所以调用可以在一个代码中发生多次。我查看了嵌套的 defaultdicts,但并没有真正找到解决方案。我已经读过 numpy 数组通常用于此目的,但是我怎样才能不断地将字段添加到 numpy 数组而不损失性能?任何帮助将不胜感激。

标签: pythonmatlabnumpydefaultdict

解决方案


最初 MATLAB 只有 2d matrices。这些类似于numpy.ndarray. 实际上numpy.matrix是一个始终是 2d 的子类,适用于任性的 MATLAB 程序员。

然后添加了MATLAB cell,有点像python list。也就是说,它们可以保存对任何类型对象的引用。

然后它添加了struct. 这有点像 python 类。一个类通常应该在开始时定义所有属性,但通常可以简单地通过赋值来添加一个属性

anObject.foobar = "astring"

它继续添加了一个类系统,首先是对 的粗略添加struct,然后更加精炼。但相比之下,在 python 中,一切都是对象,是某个类的实例。

scipy.io.loadmat可以读取 MATLAB .mat 文件(最高版本 7.3)。它返回一个numpy数组 - 对象 dtype 为cellstructured数组为struct。但是这些都没有您在 MATLAB 中看到的那种可扩展性。


推荐阅读