我想向量化這兩行代碼。我最近才瞭解了矢量化。我知道如何矢量化sumsurface行,但我不知道如何包含if語句,我真的想要矢量化整個for循環並擺脫它。我想要矢量化以改善運行時我現在運行的代碼運行速度非常慢。我預先分配了有助於改進運行時的數組。我以前忘了這麼做。如果我能得到任何幫助,將不勝感激。如何在Matlab中進行矢量化?
pH = linspace(2,12, 6000);
for j = 1:300
nAsp = randi([10, 30],[1,1]);%865
nGlu = randi([12, 38],[1,1]);%1074
nLys = randi([11, 33],[1,1]);%930
nArg = randi([10, 30],[1,1]);%879
nCys = randi([2, 8],[1,1]); %214
nTyr = randi([5, 17],[1,1]); %462
nHis = randi([4, 12],[1,1]); %360
for i = 1: len;
sumsurface(i) = (nAsp).*(-(10.^((pH(i)-asp))./(10.^((pH(i)-asp))+1)))+ (nGlu).*(-(10.^((pH(i)-glu))./(10.^((pH(i)-glu))+1)))+(nCys).*(-(10.^((pH(i)-cys))./(10.^((pH(i)-cys))+1)))+ (nTyr).* (-(10.^((pH(i)-tyr))./(10.^((pH(i)-tyr))+1)))+ (nHis).*(1./(10.^((pH(i)-his))+1))+ (nLys).*(1./(10.^((pH(i)-lys))+1))+ (nArg).*(1/(10.^((pH(i)-arg))+1));
if sumsurface(i) < .01 && sumsurface(i) > -.01
%disp(sumsurface(i));
disp(pH(i));
x(1+end) = pH(i);
aspl(1+end) = nAsp;
glul(1+end) = nGlu;
cysl(1+end) = nCys;
tyrl(1+end) = nTyr;
hisl(1+end) = nHis;
lysl(1+end) = nLys;
argl(1+end) = nArg;
end
end
end
我更新了我的代碼,我意識到我忽略了一個重要部分。我有一個雙循環,但矢量的長度是不同的。我不想讓pH矢量與nAsp = randi([10,30],[len,1])矢量的長度相同。它仍然可以矢量化這個嗎?感謝指針 –