mn = 1
for kn = 1:199
for sn = 1:19773
if abs((x1c{kn+1,1}(sn)) - (x1c{kn,1}(sn))) >= 20
extract{mn} = x1c{kn+1,1}(sn);
mn = mn+1;
end
end
end
extend = cell2mat(extract) + 40;
如何使用“extend”的值更改“x1c”的值?
答案 0 :(得分:0)
您正在对单元格执行操作。考虑到你在比较数字时,在使用矩阵时,这将更有效地完成。
我因此建议您将单元格(或其子集)转换为矩阵,然后使用矢量化操作,如下所示:
>> a={[13, 2, 3], [14, 25, 8], [100, 9, 10], [101, 8, 32], [140, 20, 3]};
>>
>> x = transpose(reshape(cell2mat(a), 3, []));
>> z = abs(x(2:end, :) - x(1:end-1,:)) > 20;
>> z2 = [zeros(1,3); z]
z2 =
0 0 0
0 1 0
1 0 0
0 0 1
1 0 1
>> x(logical(z2)) = x(logical(z2)) - 200
x =
13 2 3
14 -175 8
-100 9 10
101 8 -168
-60 20 -197
如果你真的必须使用细胞,有两种选择(出于速度原因我不推荐它)。
存储您的条件成立的单元格项目的索引(k, sn
)。然后你必须再次循环元素(非常低效)。
您存储上一个和下一个单元格" row"在临时变量中并使用它们进行比较。当条件成立时,就地编辑并在循环的下一次迭代中随身携带临时变量。下面的代码显示了如何完成此操作:
a={[13, 2, 3], [14, 25, 8], [100, 9, 10], [101, 8, 32], [140, 20, 3]};
curr_row = a{1};
for rowind=1:4
next_row = a{rowind+1};
for colind=1:3
if abs(next_row(1, colind) - curr_row(1, colind)) > 20
a{rowind+1}(1, colind) = a{rowind+1}(1, colind) + 40;
end
end
curr_row = next_row;
end