MatLAB-使用循环更有效地定义变量?

时间:2015-12-01 03:07:05

标签: performance matlab

我非常确定我的代码现在效率很低,我正在寻找指导,通过使用循环来定义变量来提高效率。

例如

Y = imread('1Y.png')
Z = imread('1Z.png')

VariableAZAZ = cat(1,AZ,AZ)
VariableAZBZ = cat(1,AZ,BZ)
VariableAZCZ = cat(1,AZ,CZ)

在相关的说明中,

CombinedAZAZAZBZ = {VariableAZAZ, VariableAZBZ}

不使用某种循环是非常繁琐的,但我对如何开始有点迷失。 基本上我的问题是,是否有办法利用变量名称表示变量的一部分是什么值这一事实。 谢谢!

2 个答案:

答案 0 :(得分:2)

我建议在这里使用Map

Y = imread('1Y.png')
Z = imread('1Z.png')

% ... load/compute AZ, BZ, CZ, ...

my_map = containers.Map();

% save into the map

my_map('AZAZ') = cat(1,AZ,AZ);
my_map('AZBZ') = cat(1,AZ,BZ);
my_map('AZCZ') = cat(1,AZ,CZ);
% ...

% retrieve the data from the map

data = my_map('AZAZ');

地图从密钥创建1:1映射 - >值,所以如果您使用模式作为键,那么编写代码来计算密钥应该非常容易。

现在,如果您只是,您甚至不需要存储变量的单元格数组 读它们:

% don't do this!
my_map('AZAZAZBZ') = {my_map('AZAZ'), my_map('AZBZ')};

因为您可以使用键直接从my_map直接阅读。

答案 1 :(得分:0)

我会尝试将内容加载到单元格数组中,而不是使用大量不同的变量名称。也许是这样的:

my_images = cell(26,1);
for(i=1:26)  %iterate from 1A.png to 1Z.png
   filename = ['1', char('A'+i-1), '.png']
   my_images{i} = imread(filename);
end

combined_images = cell(26,26);
for(i=1:26)
  for(j=1:26)
    combined_images{i,j} = cat(1, my_images{i}, my_images{j});
  end
end

加载文件的替代方法

filenames = {'1A.png','1B.png','1C.png'}; %put all filenames in a cell array
n_files = length(filenames);
my_images = cell(n_files,1);
for(i=1:n_files)    %iterate over the different filenames loading each one
   my_images{i} = imread(filenames{i});
end