我非常确定我的代码现在效率很低,我正在寻找指导,通过使用循环来定义变量来提高效率。
例如
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}
不使用某种循环是非常繁琐的,但我对如何开始有点迷失。 基本上我的问题是,是否有办法利用变量名称表示变量的一部分是什么值这一事实。 谢谢!
答案 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