我已经使用循环创建了单元格数组并放置了值。这就是我所做的:
mycell =cell(1,100,num); %% assume num anything
idx = 1;
[a,b] = size(depth);
for i=1:a
for j=1:b
if isfinite(depth(i,j))
for segId=1:2
mycell{:,idx,segId} = depth(i,j);
idx=idx+1;
最后我得到了这样的结果:
mycell(;,:,1) =
[1] [1.2] [1.222] [] [] [] [0.7] [06] [] [0.34] .....[100n]
mycell(;,:,2) =
[] [] [] [1.33] [0.5] [0.3] [] [] [0.5] [] .....[100n]
有什么方法可以删除这些单元格数组中的空单元格......
或者有什么方法可以得到这样的输出: - [1 * 9值] [1 * 88值]等等......就像在单元格数组上一样,在一个单元格中获取值...由于这个循环,我无法做到这一点。
答案 0 :(得分:0)
删除空单元格是微不足道的(类似于Luis's post)。本质上,这会在每个单元格元素上调用isempty
,然后使用此逻辑数组索引到mycell
并仅检索非空值。
newcell = mycell(cellfun(@isempty, mycell));
但是,您提到将多个元素组合到一个元素中。您可以使用{:}
扩展来执行此操作。这基本上做的是将已编入索引的所有元素扩展为单独的输入。因此,如果我们将这些输入作为cat
的输入,我们就可以连接指定维度上的所有元素。
只是为了证明:
a = {1, 2, 3};
cat(2, a{:});
[1 2 3]
因此,在您的数据中,我们可以轻松地组合第三维第一个索引的所有数据:
item = cat(2, mycell{:,:,1});
我们也可以这样做,以便在第三维度上完全展平您的数据。
newcell = arrayfun(@(x)cat(2, mycell{:,:,x}), 1:size(mycell, 3), 'uni', 0);
如果采用第二种方法,您甚至不必担心首先删除空单元格,因为它们会在连接期间消失。
a = {1, 2, 3, [], 4};
cat(2, a{:});
[1 2 3 4]