Matlab: 错误信息: ???错误的单元格引用操作

Matlab: error message: ??? Bad cell reference operation

我尝试替换:

[BB{1,1}(combs(ii,1),:) BB{1,2}(combs(ii,2),:) BB{1,3}(combs(ii,3),:)]

来自 [BB{1,1:end}(combs(ii,1:end),:)]

但我收到此错误消息:???错误的单元格引用操作。

我该如何解决这个问题?

您尝试的解决方案:

[BB{1,1:end}(combs(ii,1:end),:)]

无效,因为您不能同时为多个单元格编制索引。我猜你尝试这样做的原因是因为你想在具有不同列数的矩阵上工作。这是可能的,但你必须使用 cellfun 分别为每个单元格建立索引。

cellfun(@(x)x(combs(ii,:)), BB(1,:))

这样您就可以在二维中处理任意大小的矩阵。

更新:

我不确定我是否理解您的意图。在我的上一个解决方案中,我认为您试图获取 BB 中每个矩阵的整个 ii 行。看原代码,BB的二次元和combs的二次元是有对应关系的。这是保留该对应关系的另一种可能性:

A = cellfun(@(x,n)x(combs(ii,n),:), BB(1,:), num2cell(1:size(BB,2)), 'UniformOutput', false);
cat(2,A{:})

请注意,这仅在 BBcombs 的第二维大小相同时才有效。

除了@Alan 的回答之外,您还可以使用元胞数组的 comma-separated nature 然后使用索引将单元格内容复制到临时双数组中:

temp   = [BB{1,1:end}];
values = temp(combs(ii,1:end),:);

如果我们能像 [BB{1,1:end}](combs(ii,1:end),:) 那样对数组文字本身进行索引就好了,但是 MATLAB 没有适合该操作的语法糖(尽管在我看来,ugly way to do it).