matlab怎么将胞元的数组中为空的位置删除掉

第二个图片的内容是上面的其中一个胞元的内容,我想把第二个图片中‘’(为空)的位置删除掉,让2,3,4挨在一起,怎么实现?要对第一幅图中每个胞元都进行这个操作。。。。。。。成功追加100分

看样子,第一幅图应该是一个nx1长度的元胞数组,
每个元胞元素组里面又是1x12的元胞数组
而深一层的元胞数组的12个元素都是字符

加入你最开始那个元胞数组的名字是 a

b=cell(size(a));
for ii=1:length(a)
b{ii}=a{ii}(cellfun(@(x) ~isequal(x,''),a{ii}));
end

运行完之后,b是和a一样大小的元胞数组
b中每一个元素也是元胞数组,但是所有空字符串‘’,都被删掉

由于原来的元素都是字符,其实也可以合并为字符元胞
b=cell(size(a));
for ii=1:length(a)
b{ii}=cat(2,a{ii}{:});
end

运行完以上语句,b也是和a大小一样的元胞数组,但是每个元素是字符串追问

看懂了,但是 b{ii}=a{ii}(cellfun(@(x) ~isequal(x,''),a{ii})); 这句在运行时出现Function name must be a string.怎么解决

追答

你matlab是哪个版本的,可能版本太旧不能接受函数句柄

你直接用
b=cell(size(a));
for ii=1:length(a)
b{ii}=cat(2,a{ii}{:});
end
试试,因为你不想要空字符串,所以cat合拼时会直接忽略空字符
这样返回的b的每个元素是字符串

如果还是要返回元胞数组,可以试一下以下代码
b=cell(size(a));
for ii=1:length(a)
b{ii}=a{ii}(~cellfun('isempty',a{ii}));
end

由于空字符串可以用isempty判断,所以可以用上边代码
较早其的matlab版本没有函数句柄,可以用函数名称

追问

可以了,就是和我想的有点区别,数字都合并到一起了,但是没太大影响,谢谢了

追答

用后面
b=cell(size(a));
for ii=1:length(a)
b{ii}=a{ii}(~cellfun('isempty',a{ii}));
end

应该就不连了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-31
方法一

for i=1:14
c{i}='';
end
c{4}='2';
c{10}='3';
c{12}='4';
%c为测试元胞数组

disp('删除之前的c:')
disp(c)
c=cellstr(cell2mat(c)')'
disp('删除之后的c:')
disp(c)

方法二

for i=1:14
c{i}='';
end
c{4}='2';
c{10}='3';
c{12}='4';
disp('删除之前的c:')
disp(c)
%c为测试元胞数组
t=c;%t为临时元胞数组
clear c
%删除c并在后面循环中重构
j=1;
for i=1:length(t)
if ~isempty(t{i})
c{j}=t{i};
j=j+1;
end
end
%下面的if是为了保证在c本身就都为[]时,c不会被直接删除而是变为一个[]的元胞。
if j==1
c{1}='';
end
%如果是批量操作t可以在最后删除一次。也可以不删,不影响程序。
clear t
disp('删除之后的c:')
disp(c)
相似回答