您正在對單元執行操作。考慮到你正在比較數字,當用矩陣完成時,這將會更有效率地完成。
我爲此建議你的單元格(或它的一個子集)轉換爲一個矩陣,然後使用矢量操作,像這樣:
>> 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