Matlab:减少向量大小的优化

Matlab:减少向量大小的优化,matlab,optimization,Matlab,Optimization,我开发了一个函数来减小初始向量的大小X=[X,y]。但是对于500000点的X和点的限制=10000,Matlab需要16秒来完成此功能 有没有什么方法可以优化这一点,可能是通过使用矩阵运算(矢量化)删除循环 另一个最好的办法是采用新方法: Ratio = ceil(length(X(:,1))/points_limit); X = ceil(X); X = sortrows(X,1); X = sortrows(X,2); X1=[]; for i=1:points_limit - 1

我开发了一个函数来减小初始向量的大小
X=[X,y]
。但是对于500000点的
X
点的限制=10000
,Matlab需要16秒来完成此功能

有没有什么方法可以优化这一点,可能是通过使用矩阵运算(矢量化)删除循环

另一个最好的办法是采用新方法:

Ratio = ceil(length(X(:,1))/points_limit);
X = ceil(X);
X = sortrows(X,1);
X = sortrows(X,2);
X1=[];
for i=1:points_limit - 1
    X1 = [X1; mean(X(i*Ratio:(i+1)*Ratio,1)), mean(X(i*Ratio:(i+1)*Ratio,2))];
end
X = X1;
目标是减少向量中的点数:二维向量的一种压缩函数形式

你知道我能不能用loop做这个新方法吗


您认为我的压缩算法怎么样?

您可以轻松地将内部for循环矢量化:

k = 1;
X = rand(5e5,2);
X2 = zeros(round(length(X(:,1))/2),2);
tic
for i=1:2:length(X(:,1))-1
    X2(k,1) = mean([X(i,1) ,X(i+1,1) ]);
    X2(k,2) = mean([X(i,2) ,X(i+1,2) ]);
    k = k + 1;
end
toc % Elapsed time is 1.988739 seconds.
tic
X3 = (X(1:2:length(X(:,1))-1,:) + X(2:2:length(X(:,1)),:))/2;
toc % Elapsed time is 0.014575 seconds.
isequal(X2,X3) % true

也许我们也可以优化while循环,使用domeans获得2个以上的点,以便直接获得好的点数?如果您描述了您正在尝试做的事情,这会有所帮助。我想减少过长的顶点。例如,如果X=500000,我想在不改变矢量的情况下减少30000个点的长度对不起,这并不能告诉我什么。如果您只是想将向量的长度减少到30000点,您可以使用
X=X(1:30000)
。这里肯定还有别的事。
k = 1;
X = rand(5e5,2);
X2 = zeros(round(length(X(:,1))/2),2);
tic
for i=1:2:length(X(:,1))-1
    X2(k,1) = mean([X(i,1) ,X(i+1,1) ]);
    X2(k,2) = mean([X(i,2) ,X(i+1,2) ]);
    k = k + 1;
end
toc % Elapsed time is 1.988739 seconds.
tic
X3 = (X(1:2:length(X(:,1))-1,:) + X(2:2:length(X(:,1)),:))/2;
toc % Elapsed time is 0.014575 seconds.
isequal(X2,X3) % true