我想向量化这两行代码。我最近才了解了矢量化。我知道如何矢量化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])矢量的长度相同。它仍然可以矢量化这个吗?感谢指针 –