- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近发现了以前没有发生过的 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/
我是一名优秀的程序员,十分优秀!