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{:})
请注意,这仅在 BB
和 combs
的第二维大小相同时才有效。
除了@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).
我尝试替换:
[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{:})
请注意,这仅在 BB
和 combs
的第二维大小相同时才有效。
除了@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).