【MATLAB】load 的用法?如何导入.mat文件中的一个变量?

Beanocean 2014-01-01 03:53:14
我有一个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这个变量而不显示警告呢?
...全文
26194 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Beanocean 2014-01-09
引用 1 楼 libralibra 的回复:
matlab就是这样的,你a = load(...)之后,a可以看做那个mat对象,保存在mat中的变量需要通过点操作符(.)加名称来获取,例如a.img_db 你说的那个错误,最好将错误信息全部发上来看看
上面的其实也不算错误,我想着有没有一种load的方式,在引用.mat内的变量时,不用像a.img_db这样引用,而是直接使用img_db这个变量。还是说只能像你所说的这种方式引用?
回复
Beanocean 2014-01-09
引用 3 楼 libralibra 的回复:
[quote=引用 2 楼 u011906472 的回复:] [quote=引用 1 楼 libralibra 的回复:] matlab就是这样的,你a = load(...)之后,a可以看做那个mat对象,保存在mat中的变量需要通过点操作符(.)加名称来获取,例如a.img_db 你说的那个错误,最好将错误信息全部发上来看看
上面的其实也不算错误,我想着有没有一种load的方式,在引用.mat内的变量时,不用像a.img_db这样引用,而是直接使用img_db这个变量。还是说只能像你所说的这种方式引用?[/quote] 个人推荐用点操作符,因为这样可以控制导入的变量(有点儿像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)
[/quote] 谢谢你的回答。 我知道这种load的方法,但是这样卸载scripts里会提示警告。那我以后还是用加点引用的方式吧~~谢谢啦
回复
libralibra 2014-01-09
引用 2 楼 u011906472 的回复:
[quote=引用 1 楼 libralibra 的回复:] matlab就是这样的,你a = load(...)之后,a可以看做那个mat对象,保存在mat中的变量需要通过点操作符(.)加名称来获取,例如a.img_db 你说的那个错误,最好将错误信息全部发上来看看
上面的其实也不算错误,我想着有没有一种load的方式,在引用.mat内的变量时,不用像a.img_db这样引用,而是直接使用img_db这个变量。还是说只能像你所说的这种方式引用?[/quote] 个人推荐用点操作符,因为这样可以控制导入的变量(有点儿像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)
回复
libralibra 2014-01-07
matlab就是这样的,你a = load(...)之后,a可以看做那个mat对象,保存在mat中的变量需要通过点操作符(.)加名称来获取,例如a.img_db 你说的那个错误,最好将错误信息全部发上来看看
回复
发动态
发帖子
其他开发语言
创建于2007-08-27

3369

社区成员

其他开发语言 其他开发语言
申请成为版主
社区公告
暂无公告