解决错误类型参数 '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));
我使用
在变量'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));