【问题标题】:Search elements of matrix in another cell in matlab在matlab中的另一个单元格中搜索矩阵的元素
【发布时间】:2016-05-11 16:26:36
【问题描述】:

我有一个列矩阵和一个有两列的元胞数组。第一列有 1x2 双精度,第二列有 1x1 双精度。

例如

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

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

例如输出必须是这样的

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

我尝试以这种方式使用ismember函数

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

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

有什么方法可以实现这个操作吗?有人可以帮忙吗?

谢谢

【问题讨论】:

  • 它显示了哪些索引以及它们的排列方式?
  • idx = [1,0;0,1;0,0;0,2;0,0;2,0];

标签: arrays matlab cell


【解决方案1】:

首先,将cellArray 的第一列转换为矩阵,以便更容易在其中搜索值。然后迭代columnMatrix 值(例如,使用arrayfun,但您也可以使用for 循环),查找匹配的行(跨列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];

【讨论】:

  • 感谢这个 arrayfun 操作。我使用了 for 循环,但想知道它是否可以通过其他方式完成!
  • 如果你不介意我对你的回答有一个后续问题。如果cellArray 的第一列的大小不相等,但1xnn>=2 的位置是双倍的怎么办?在这种情况下,cell2mat 返回一个连接错误!请问有什么建议吗?谢谢!
  • 您仍然需要获取逻辑索引。所以不用any(mat==x,2),你可以例如做cellfun(@(arr) any(arr==x), cellArray(:,1))。请注意,我们不再需要mat varialbe。
猜你喜欢
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2017-02-10
相关资源
最近更新 更多