通过与另一个单元格比较,从单元格中索引值

时间:2015-01-04 23:01:34

标签: matlab indexing concatenation

我有2个细胞, B M B 是nx1细胞, M 是nx2细胞。 B 中的某些值是空白。其余部分与 M {:,2} 相同。像这样:

B=
'beta001.img'  
'beta002.img'  
[]  
[]  
[]  
'beta006.img'
[]  
...  

M=
67    'beta001.img'  
89    'beta002.img'  
34    'beta003.img'  
14    'beta004.img' 
15    'beta005.img' 
32    'beta006.img'  
...  

我想创建一个单元格 C ,其中包含M的第1列中的值,但前提是第二列中的相应值与B中的值相匹配。基本上,通过上面的示例, C 应该是:

67
89
32

我可以看到至少有两种选择。最简单的是做一个B和M的horzcat然后去除所有包含空白的行。我试过了:

C=horzcat(B,M);
C=R(~cellfun('isempty',C));  

不幸的是,这不起作用。由于我想学习如何使用ismember,第二种选择是使用它来比较B和M.可以有人帮助我吗?

1 个答案:

答案 0 :(得分:1)

您的方法已得到纠正:

这连接了矩阵。然后提取行,其中没有任何空条目,然后是结果的第二列。

C = horzcat(B,M);
C = C(~any(cellfun('isempty',C),2),:);
C = cell2mat(C(:,2)); 

但是,您不需要连接单元阵列来实现您正在做的事情。

简化方法:

您可以找到B不为空的行,然后取出所述相应行的M的第一列。

isBnotEmpty = ~cellfun(@isempty, B);
C = cell2mat(M(isBnotEmpty,1));