matlab单元阵列的大小远远大于实际数据

时间:2015-10-04 07:53:27

标签: matlab cell-array

我最近发现了一种奇怪的MATLAB单元阵列行为,以前没有发生过。

如果我用

创建一个单元格数组
a=cell(1,4)

它的大小是32个字节。

如果那时我把东西放在里面,例如

a{2}='abcd'

它的大小变为144字节。但是,如果我通过添加

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

大小变为132字节,依此类推。有什么问题?

2 个答案:

答案 0 :(得分:7)

简单地说,Matlab单元阵列需要一些内部数据结构来跟踪存储的内容。

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

删除数据并不意味着matlab可以将现在未使用的内存返回到操作系统或内部内存池 - 这可能是内部存储结构无法实现的,也可能是不明智的内容关于性能,因为从中删除数据的单元数组(在单元数组的所有用例中都说)是经常更新的结构,因此“过早地”返回内存只是为了再次获取它以后的说明会非常强大。

作为一般性说明:除了矩阵和稀疏矩阵之外,Matlab几乎所有的存储方法都非常糟糕(向量当然是矩阵的特殊情况)。那是因为Matlab的工作并非如此。字符串解析器等。

如果内存成为问题,可能值得考虑在Matlab中实现问题的数学核心,并在其他更常用的编程语言中完成其余工作,并以某种方式将Matlab代码与其连接 - 我还没有尝试过我自己,但是Mathworks有一个Matlab engine for python,我每天都会用matlab编写python来存储任意数据。使用该引擎,您可以调用Matlab进行脏数学工作,并使用python进行日常脚本/编程工作。

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

我甚至可以说,学习python可能值得花时间,只是为了能够规避必须处理Matlab不适合的事情(并且单元格数组是什么的一个主要的例子) Matlab非常复杂,在python中非常容易。

答案 1 :(得分:0)

您使用

a{2}=[]

'杀死'该字段中的数据。实际上,您实际上是访问数据,即您留下一个非空单元格条目,其中包含空的双数组。 (感谢matlab将空单元格表示为空双精度......)

但是如果你使用(没有花括号,但括号):

a(2) = cell(1,1)

然后单元格数组大小又回到“空”= 32字节。