当前位置: 代码迷 >> 其他开发语言 >> 【MATLAB】load 的用法?怎么导入.mat文件中的一个变量
  详细解决方案

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

热度:203   发布时间:2016-05-02 04:03:08.0
【MATLAB】load 的用法?如何导入.mat文件中的一个变量?
我有一个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这个变量而不显示警告呢?

------解决方案--------------------
引用:
Quote: 引用:

matlab就是这样的,你a = load(...)之后,a可以看做那个mat对象,保存在mat中的变量需要通过点操作符(.)加名称来获取,例如a.img_db
你说的那个错误,最好将错误信息全部发上来看看

上面的其实也不算错误,我想着有没有一种load的方式,在引用.mat内的变量时,不用像a.img_db这样引用,而是直接使用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)

  相关解决方案