python - 以灵活的方式在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 数组而不损失性能?任何帮助将不胜感激。
解决方案
最初 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 为cell
,structured
数组为struct
。但是这些都没有您在 MATLAB 中看到的那种可扩展性。
推荐阅读
- javascript - 如何在 rails 和 ember 之间触发 get 请求
- python - 向 JointGrid 中的直方图添加百分比
- python - 在 pytest 中使用 mocker 模拟类变量
- python - 使用日期范围的布尔索引
- sql - 一个查询中的多个 SUM 与多个 where
- python - 如何在 Python 数据框中重复单个值与其他列一样多次?
- go - 恐慌:同步:对同一端点的多个请求的负 WaitGroup 计数器
- python - 使用现有 CNN 模块的 Pytorch 自定义模块
- python - 在 Python pig latin 翻译器中保持首字母大写
- python - 如何在运行命令时让加载 gif 工作