删除MATLAB中的数组元素

Joe*_*e C 0 matlab octave

在MATLAB中,我们可以删除一个对象

o = obj();
delete o;
Run Code Online (Sandbox Code Playgroud)

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

arr = {obj(), obj(), obj()};
delete arr{1}; % ???
Run Code Online (Sandbox Code Playgroud)

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

Tas*_*nou 5

首先,这条线

delete o;
Run Code Online (Sandbox Code Playgroud)

不会做你认为它做的事情.在命令语法中,o被解释为字符串,这将删除当前工作目录中名为"o"的文件.

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

delete(o);   % where o is an object in the workspace.
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

arr = {obj(), obj(), obj()};
arr(1) = [];
Run Code Online (Sandbox Code Playgroud)

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


PS.以上所有也适用于八度音阶.