Info
此问题已关闭。 请重新打开它进行编辑或回答。
Reducing time code takes to run using profile viewer
1 次查看(过去 30 天)
显示 更早的评论
This code below takes up about 40 seconds when the size of the matrix is (13,5,2000) All im doing is removing any matrixs which are repeated.
ie if big_data(:,:,x)==big_data(:,:,x+1) then remove one of the matrixs. I know there is a unique function, but I cant seem to get it to work how I want. When I scale it up to matrixs of size (13,5,10000), its just taking too long.
Is there a better way? thanks.
while x<length(big_data(1,1,:))+1
while y<length(big_data(1,1,:))
y=y+1;
if big_data(:,:,x)==big_data(:,:,y)
big_data(:,:,y)=[];
y=y-1;
end
end
x=x+1;
y=x;
end
0 个评论
回答(2 个)
Jan
2012-2-12
Shrinking a large array iteratively requires a lot of resouerces, equivalently to growing. Better use a logical vector to mark subarrays and delete them all together after the loops.
0 个评论
Paul
2012-2-14
1 个评论
Sean de Wolski
2012-2-14
yup.
But be sure to preallocate to_delete.
Or even better use a logical vector:
to_delete = false(1,1,size(big_data,3));
while ...
to_delete(1,1,index) = true
end
etc
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!