【发布时间】:2017-04-04 13:25:48
【问题描述】:
我开发了一个函数来减小初始向量X = [x,y] 的大小。但是对于 500,000 点的 X 和 points_limit = 10000,Matlab 需要 16 秒才能完成此功能。
有什么方法可以优化这个,也许是通过使用矩阵运算(向量化)去除循环?
function X = reduce_vector_size(X,points_limit)
while length(X) > points_limit
k = 1;
X2 = zeros(round(length(X(:,1))/2),2);
X = sortrows(X);
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
X = X2;
end
另一个最好的主意是采用新方法:
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;
目标是减少向量中的点数:二维向量的一种压缩函数形式。
你知道我能不能用循环来做这个新方法吗?
你觉得我的压缩算法怎么样?
【问题讨论】:
-
如果您描述了您正在尝试做的事情会有所帮助。
-
我想减少一个太长的变频器。例如,如果 X= 500000 的长度,我想可以在不改变向量的情况下减少 30 000 个点的长度
-
对不起,这并不能告诉我任何事情。如果您只是想将向量的长度减少到 30,000 个点,您可以使用
X = X(1:30000)。这里肯定还有其他事情发生。
标签: matlab optimization