您正在对单元执行操作。考虑到你正在比较数字,当用矩阵完成时,这将会更有效率地完成。
我为此建议你的单元格(或它的一个子集)转换为一个矩阵,然后使用矢量操作,像这样:
>> 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
)。然后你必须再次循环元素(非常低效)。
您可以将上一个和下一个单元格“行”存储在临时变量中,并使用这些变量进行比较。当条件成立时,就地编辑并在循环的下一次循环中随身携带临时变量。下面的代码显示如何做到这一点:
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
你所说的“改变价值观”呢?请修复您的缩进,这会让我的眼睛流血。 – dasdingonesin
我想改变“x1c”单元格的特定元素,这个单元格已经被提取了一个if操作,其值为“extend”。这可能是“换镜片”的时候了。 – matlabcrz
我不知道你的意思。你想把'extend'的内容分配给'x1c'吗?哪些特定元素? – dasdingonesin