我有一个列矩阵和一个有两列的单元格数组。第一列有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));
这将返回具有搜索元素的所有索引,但它们位于两个单独的列中,并且我无法执行任何其他逻辑操作来获取相应的第二列条目。
是否可以通过某种方式实现此操作?有人可以帮忙吗?
由于
答案 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];