在matlab中搜索另一个单元格中的矩阵元素

时间:2016-05-11 16:26:36

标签: arrays matlab cell

我有一个列矩阵和一个有两列的单元格数组。第一列有1x2双打,第二列有1x1双打。

例如

columnMatrix = [1;5]; 
cellArray = {[1,8],[10];[8,1],[20];[4,6],[80];[3,5],[40];[14,16],[85];[5,10],[36]};

我想在columnMatrix中搜索cellArray(:,1)的每个元素,然后在cellArray(:,2)

中返回其对应的值

例如输出必须像这样

newCell = {[1],[10,20];[5],[40,36]};

我尝试以这种方式使用ismember功能

[~,idx] = ismember(cell2mat(cellArray(:,1)),columnMatrix (: , 1));

这将返回具有搜索元素的所有索引,但它们位于两个单独的列中,并且我无法执行任何其他逻辑操作来获取相应的第二列条目。

是否可以通过某种方式实现此操作?有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:1)

首先,将cellArray的第一列转换为矩阵,以便更容易搜索值。然后迭代columnMatrix个值(例如使用arrayfun,但你可以也用于循环),找到匹配(any跨列)的行,并从cellArray的第二列中选择相应的值,转换为数字数组([cellArray{...,2}])。最后,将columnMatrix附加为结果单元格数组的第一列:

columnMatrix = [1;5]; cellArray = {[1,8],[10];[8,1],[20];[4,6],[80];[3,5],[40];[14,16],[85];[5,10],[36]};

mat = cell2mat(cellArray(:,1));
values = arrayfun(@(x) [cellArray{any(mat==x,2),2}], columnMatrix, 'uni', false);
result = [num2cell(columnMatrix), values];
相关问题