删除MATLAB中的数组元素

时间:2016-10-08 14:38:32

标签: matlab octave

在MATLAB中,我们可以通过

删除一个对象
o = obj();
delete o;

我们可以显式删除数组中的对象吗?

arr = {obj(), obj(), obj()};
delete arr{1}; % ???

另外,如果我们明确地调用delete,MATLAB会释放内存吗?

1 个答案:

答案 0 :(得分:5)

首先,这一行

delete o;

不符合您的想法。在命令语法中,o被解释为一个字符串,这将删除名为" o"的文件。在您当前的工作目录中。

如果要删除对象o,则需要使用功能语法,即

delete(o);   % where o is an object in the workspace.

但是,这不符合您的想法! "删除"销毁句柄引用的对象,即图形对象句柄(如图)或继承自句柄超类的 matlab对象。请注意"句柄"变量o本身仍在您的工作区中,它指向一个现在已删除的对象!

如果你拥有的只是一个普通的变量/对象而你只是想从工作区中删除它,那么你只需要clear

其次,arr不是一个数组'它是一个单元格数组。这是一个迂腐的问题,但是一个重要的问题,因为matlab 确实允许正常的对象数组。

第三,是的,回答你的问题,有一种方法可以显式删除/删除数组中的对象,这样就可以将数组拼接在一起。这样做的方法是将该元素的元素指定为空元素,即

arr = {obj(), obj(), obj()};
arr(1) = [];

matlab的垃圾收集器处理引擎盖下的事情,你不需要在这个意义上明确处理内存。

<小时/> PS。以上所有内容也适用于八度音阶。