Performance MATLAB:如何提高这个特定代码的速度?
我基本上是在尝试按顺序读取50000个png文件(文件名为1.png,2.png…),然后将它们逐个转换为灰度。然后我使用整形函数将这些图像数据转换为单个向量。此处的imresize将32*32图像尺寸减小为8*8。由于下面的for循环需要很多时间(大约5到6分钟),我正在考虑其他方法或任何优化方法。我尝试了并行计算工具箱中的matlabpool和parfor,但由于我在一台独立的计算机上工作,所以它对我不起作用。请建议我在这个代码中的一些方法或更改Performance MATLAB:如何提高这个特定代码的速度?,performance,matlab,for-loop,Performance,Matlab,For Loop,我基本上是在尝试按顺序读取50000个png文件(文件名为1.png,2.png…),然后将它们逐个转换为灰度。然后我使用整形函数将这些图像数据转换为单个向量。此处的imresize将32*32图像尺寸减小为8*8。由于下面的for循环需要很多时间(大约5到6分钟),我正在考虑其他方法或任何优化方法。我尝试了并行计算工具箱中的matlabpool和parfor,但由于我在一台独立的计算机上工作,所以它对我不起作用。请建议我在这个代码中的一些方法或更改 image_Coll = zeros(8*8
image_Coll = zeros(8*8,50000);
for k = 1:50000
imageData = imread(strcat('D:\MATLAB_FILES\KAGGLE_CIFAR\train\',num2str(k), '.png'));
imageData = imresize(imageData,[8 8]);
imageData = rgb2gray(imageData);
imageData=reshape(imageData,8*8,1); % 8 * 8 pixels
image_Coll(:,k)= imageData;
end
最耗时的部分可能是
imread
,对此您可能无能为力
通过在循环中使用单独的变量,可以稍微减少时间。在代码保持不变的情况下,imageData
首先是32x32,然后是8x8,在下一次迭代中,Matlab必须分配内存以再次生成imageData
32x32。可以避免使用两个变量而不是一个变量。另外,(:)
可能比重塑
更快:
image_Coll = zeros(8*8,50000);
for k = 1:50000
imageData = imread(strcat('D:\MATLAB_FILES\KAGGLE_CIFAR\train\',num2str(k), '.png'));
imageData2 = imresize(imageData,[8 8]);
imageData2 = rgb2gray(imageData2);
image_Coll(:,k)= imageData2(:);
end
或许
image_Coll = zeros(8*8,50000);
for k = 1:50000
imageData = imread(strcat('D:\MATLAB_FILES\KAGGLE_CIFAR\train\',num2str(k), '.png'));
imageData2(:,k)= rgb2gray(imresize(imageData,[8 8]));
image_Coll(:,k)= imageData2(:);
end
不过,我认为这不会为您节省太多时间。您希望达到什么样的速度?就我个人而言,我不认为每分钟打开1000张图片不算慢 如果你想要显著的加速,你可能需要跳出框框思考一下。我可以想出一些办法:
无论如何,一定要使用
配置文件
,关注瓶颈,并保持现实的期望。哦,这太可悲了。我以前使用了更多的变量,然后这样做。我同意丹尼斯的观点-?我认为有更好的方法来做到这一点。是的,我是一个早熟的程序员。