我有一个img_db.mat文件,想用load方式导入到当前的工作空间中。在这个.mat文件中只有一个名为 img_db 的 struct 类型变量。我在脚本中这么写的:
% code 1:
load('img_db.mat');
然后我在之后的代码中引用 img_db 这个变量时,提示警告:unset;这是在使用前没有声明的原因。然后我又用如下方式导入:
% code 2:
img_db = load('img_db.mat');
这次不显示警告了,但是程序运行错误。在排错时,我查看workspace中的img_db这个变量,发现不对:
原来的img_db是一个struct类型的变量,其形式如下:
% code 3:
img_db:{
string name;
array tiny_descriptor;
array histgrame;
string img_id;
}
但是用第二种方式导入之后,其形式变为:
% code 4:
img_db:{
struct img_db; % 它才是code 3中的img_db
}
img_db.img_db:{
string name;
array tiny_descriptor;
array histgrame;
string img_id;
}
如下图:
如何才能正确导入img_db这个变量而不显示警告呢?
------解决方案--------------------
个人推荐用点操作符,因为这样可以控制导入的变量(有点儿像c++等语言的命名空间,防止变量名冲突).直接load('img_db.mat')之后,如果你前面有同名变量,会被覆盖的.
但是如果你非要如此用,是可以的.原来.mat文件中的所有变量已经被导入了当前工作空间,可以直接使用.你可以自己写个代码测试一下.
下面的代码跑一次你就明白了
% generate test data
a = randi(100,[2,3]);
save('a.mat','a');
% test
load('a.mat')
whos
size(a)