Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB中单元阵列的元素去除_Arrays_Matlab_Indexing_Cell Array - Fatal编程技术网

Arrays MATLAB中单元阵列的元素去除

Arrays MATLAB中单元阵列的元素去除,arrays,matlab,indexing,cell-array,Arrays,Matlab,Indexing,Cell Array,我有一个单元格数组,如下所示: a = {[1 2 3] [5 3 6] [9 1 3]}; 现在我想从a中包含1的每个数组中删除1,以便输出如图所示 a = {[2 3] [5 3 6] [9 3]}; 我知道单元格数组“a”中包含1的数组的索引。这可以使用for循环和一个临时变量来完成,但这需要花费很多时间(我想在一个大小约为1x1000000的单元格数组上执行此操作。上面的操作只是一个示例) 我想知道是否有任何直接方法可以快速做到这一点。对于这么大的单元阵列,几乎任何事情都会很慢。您可

我有一个单元格数组,如下所示:

a = {[1 2 3] [5 3 6] [9 1 3]};
现在我想从
a
中包含
1
的每个数组中删除1,以便输出如图所示

a = {[2 3] [5 3 6] [9 3]};
我知道单元格数组“a”中包含1的数组的索引。这可以使用
for
循环和一个临时变量来完成,但这需要花费很多时间(我想在一个大小约为1x1000000的单元格数组上执行此操作。上面的操作只是一个示例)


我想知道是否有任何直接方法可以快速做到这一点。

对于这么大的单元阵列,几乎任何事情都会很慢。您可以尝试使用
cellfun
来实现这一点,但它不一定比for循环快

a = cellfun(@(x)x(x ~= 1), a, 'UniformOutput', false);

%   a{1} =
%        2     3
%   a{2} =
%        5     3     6
%   a{3} =
%        9     3

正如Suever所评论的,因为您使用的是一个单元格数组,并且它是一个动态容器,所以如果您想要修改内容,您没有选择,只能遍历每个单元格。为了自包含,以下是执行操作的
for
循环方法:

for ii = 1 : numel(a)
    a{ii} = a{ii}(a{ii} ~= 1);
end
这可能会更快,因为它不会承受
cellfun
的开销。上面的代码访问每个单元格中的向量,提取出不等于1的值,并用这个新向量覆盖相应的单元格

以您的例子:

a = {[1 2 3] [5 3 6] [9 1 3]};
我们得到:

>> format compact; celldisp(a)
a{1} =
     2     3
a{2} =
     5     3     6
a{3} =
     9     3

此示例演示如何从单个单元格中删除数据,以及如何从单元格数组中删除整个单元格。要运行本例中的代码,请创建一个3×3单元格数组:

C = {1, 2, 3; 4, 5, 6; 7, 8, 9};
删除特定单元格的内容,方法是为该单元格指定一个空数组,使用大括号进行内容索引,{}:

C{2,2} = []
此代码返回

C = 
    [1]    [2]    [3]
    [4]     []    [6]
    [7]    [8]    [9]
使用带平滑圆括号的标准数组索引删除单元格集,()。例如,此命令

C(2,:) = []
删除C的第二行:

`


给出的输入与问题中提供的不同。您将单个元素创建为单元格,而问题将向量创建为单元格元素。这是一个切线,我不相信这是建设性的回答问题。如果你觉得这句话冒犯了我,我很抱歉,但这并不能回答问题。
C = 
    [1]    [2]    [3]
    [7]    [8]    [9]`