gpt4 book ai didi

matlab 元胞数组大小远大于实际数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:24 25 4
gpt4 key购买 nike

我最近发现了以前没有发生过的 MATLAB 元胞数组的奇怪行为。

如果我用

创建元胞数组
a=cell(1,4)

它的大小是 32 字节。

如果我在里面放了一些东西,例如

a{2}='abcd'

它的大小变成了 144 字节。但是,如果我通过放置

来删除此内容
a{2}=[]

大小变成132字节等等。有什么问题?

最佳答案

简单地说,Matlab 元胞数组需要一些内部数据结构来跟踪存储在其中的内容。

看起来,Matlab 会根据需要分配内存,从而在您插入数据时扩展元胞数组所需的存储空间。

删除数据并不意味着 matlab 可以将现在未使用的内存返回给操作系统或内部内存池——这可能是内部存储结构无法做到的事情,或者是不明智的事情 关于性能,因为从中删除数据的元胞数组(就元胞数组的所有用例而言)是经常更新的结构,因此“过早地”返回内存只是为了再次获取它后面的指令会非常占用 CPU。

作为一般说明:Matlab 对几乎所有东西都有非常糟糕的存储方法,但矩阵和稀疏矩阵除外(向量当然是矩阵的特例)。那是因为它不是 Matlab 的工作,例如。一个字符串解析器等。

如果内存成为问题,可能值得考虑在 Matlab 中实现问题的数学核心,然后用其他更通用的编程语言完成其余部分,并以某种方式将您的 Matlab 代码与它接口(interface)——我还没有尝试过那是我自己,但 Mathworks 有一个 Matlab engine for python ,而且我每天都会使用 Python 编写 Python 来存储任意数据,而不是使用 Matlab;使用该引擎,您可以调用 Matlab 来完成繁琐的数学工作,并使用 Python 来完成日常脚本/编程工作。

请注意,我的底线是 Matlab 具有出色的数学例程和令人印象深刻的文档,但如果您想真正开发软件,使用通用工具/语言可能更令人满意很快。

我什至会说花时间学习 python 可能值得,只是为了能够避免处理 Matlab 并非设计用于的事情(元胞数组就是一个典型的例子) Matlab 真的很复杂,而在 python 中却非常简单)。

关于matlab 元胞数组大小远大于实际数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32931265/

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