解决错误类型参数 'cell'

Solve wrong type argument 'cell'

我使用

在变量 'O' 中写入一些值
for i = 1:size(I,1)
for j = 1:size(1,I)
h = i * j;
O{h} = I(i, j) * theta(h);
end
end

I - 双倍,theta - 双倍。 我需要 sum() 所有 'O' 值,但是当我这样做时它会给我 error: sum: wrong type argument 'cell'。 我怎样才能sum()呢? P.s。当我想看 O() 时,它给我

O = 
{
  [1,1] =  0.0079764
  [1,2] =  0.0035291
  [1,3] =  0.0027539
  [1,4] =  0.0034392
  [1,5] =  0.017066
  [1,6] =  0.0082958
  [1,7] =    1.4764e-04
  [1,8] =  0.0024597
  [1,9] =    1.1155e-04
  [1,10] =  0.0010342
  [1,11] =  0.0039654
  [1,12] =  0.0047713
  [1,13] =  0.0054305
  [1,14] =    3.3794e-04
  [1,15] =  0.014323
  [1,16] =  0.0026826
  [1,17] =  0.013864
  [1,18] =  0.0097778
  [1,19] =  0.0058029
  [1,20] =  0.0020726
  [1,21] =  0.0016430 
etc...

您问题的确切答案是使用 cell2mat

sum (cell2mat (your_cell_o))

但是,这是解决您问题的非常错误的方法。问题是你不应该首先创建一个元胞数组。您应该已经创建了一个数值数组:

O = zeros (size (I), class (I));
for i = 1:rows (I)
  for j = 1:columns (I)
    h = i * j;
    O(h) = I(i, j) * theta(h);
  endfor
endfor

但即使这样也很糟糕而且很慢。 Octave 是一种向量化操作的语言。相反,您应该:

h = (1:rows (I))' .* (1:columns (I)); # automatic broadcasting
O = I .* theta (h);

假设您的函数 theta 行为正确,并且如果给定矩阵将计算 h 和 return 相同大小的每个元素的值。

如果您收到有关大小错误的错误消息,我猜您使用的是不执行自动广播的旧版本 Octave。如果是这样,请更新 Octave。如果实在不行,那么:

h = bsxfun (@times, (1:rows (I))', 1:columns (I));