【问题标题】:Extract specific values from cell based on array in MATLAB基于MATLAB中的数组从单元格中提取特定值
【发布时间】:2016-02-10 13:50:47
【问题描述】:

我想从一个简单的cell-array 中提取一些特定的值,如下所示:

CellExample{1} = [1,54,2,3,4]
CellExample{2} = [1,4,1,92,9,0,2]
...

我还有一个额外的数组,它告诉我要从每个 Cell 元素中提取哪个元素。数组和单元格一样长:

ArrayExample = [2,4,...]

基本上,我想要一个表示:

Solution(1) = CellExample{1}(ArrayExample(1)) = 54
Solution(2) = CellExample{2}(ArrayExample(2)) = 92

我想过用cellfun,但是我在正确使用它时还是有一些问题,例如:

cellfun(@(x) x{:}(ArrayExample),CellExample,'UniformOutput',false)

【问题讨论】:

  • 您的解决方案(1)不是应该是 54 吗?还是我错过了什么?
  • cellfun() 已经将单元格的内容传递给匿名函数,因此不需要{:}
  • 从循环开始,使用循环没有任何错误。先有一些功能性的东西,然后再考虑让它变得漂亮/高效。
  • @Oleg,你是对的 - 实际上,我只是通过使用调试器发现了这一点 - 但是,我仍然无法从数组中传递正确的值
  • @Jonas 现在是 52,而不是 54...

标签: arrays matlab cell-array


【解决方案1】:

以下

Cell{1} = [1,54,2,3,4]
Cell{2} = [1,4,1,92,9,0,2]

cellfun(@(x) disp(x), Cell)

相当于循环

for ii = 1:numel(Cell)
    disp(Cell{ii})
end

也就是说,cellfun() 已经将每个单元格的 内容 传递给匿名函数。

但是,由于您想将 numeric 数组作为第二个输入传递给匿名函数,而 cellfun() 只接受 cell() 输入,因此您需要使用 arrayfun() ,它不会解压单元格内容。

在你的情况下:

arrayfun(@(c,pos) c{1}(pos), Cell, Array)

相当于:

for ii = 1:numel(Cell)
    Cell{ii}(Array(ii))
end

【讨论】:

  • 非常感谢 1) 帮助我更好地理解 cellfun 和 2) 我正在寻找的简单解决方案。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
相关资源
最近更新 更多