我正在使用MATLAB处理文件中的数据.我正在编写一个程序,它从用户那里获取输入,然后将特定文件定位在绘制它们的目录中.文件命名为:
{名} U {}率
{name}是表示计算机名称的字符串.{rate}是一个数字.这是我的代码:
%# get user to input name and rate
NET_NAME = input('Enter the NET_NAME of the files: ', 's');
rate = input('Enter the rate of the files: ');
U = strcat(NET_NAME, 'U', rate)
load U;
Ux = U(:,1);
Uy = U(:,2);
Run Code Online (Sandbox Code Playgroud)
目前有两个问题:
当我strcat说"你好","你好",费率是50时,你会存储'helloU2' - 我怎样才能strcat正确追加{rate}?
加载线 - 如何取消引用U,以便加载尝试加载存储在U中的字符串?
非常感谢!
是否有一种快速的方法(即一行)将一组变量转储到一个结构中,使用变量名称作为结构字段?"加载"功能基本上可以做到这一点,但保存和加载到临时文件似乎很难看.
例如:
clear
a = 'adsf'
b = rand(10);
x = var2struct(a,b)
x.a
x.b
Run Code Online (Sandbox Code Playgroud)
或者更好的是:
x = var2struct(['a';'b'])
Run Code Online (Sandbox Code Playgroud)
另外,反过来(即将字段值作为字段命名的变量转储到当前作用域)?
clear
x.a='asdf'
x.b=rand(10);
dumpstruct(x)
a
b
Run Code Online (Sandbox Code Playgroud)
另外,这是一个相关的新闻组主题.
相关代码:
function result = loadStructFromFile(fileName, environmentName)
result = load(fileName, environmentName);
bigMatrix = loadStructFromFile('values.mat','bigMatrix');
Run Code Online (Sandbox Code Playgroud)
但是当我查看工作区时,它会将'bigMatrix'显示为1x1结构.但是,当我单击结构时,它是实际数据(在本例中为aa 998x294矩阵).
我有四个变量,每个变量保存在365个mat文件中(大小:8 x 92 x 240).我尝试在for-loop day = 1:365中将这些加载到我的函数中,每天一个变量文件.但是,这两个第一个变量总是需要很长时间才能加载.我的加载代码如下所示:
load([eraFolder sprintf('Y%dD%d-tempSD.mat',year,day)], 'tempSD'); % took 5420 s to load
load([eraFolder sprintf('Y%dD%d-tempDewSD.mat',year,day)], 'tempDewSD')
load([eraFolder sprintf('Y%dD%d-eEraSD.mat',year,day)], 'eEraSD'); % took 6 seconds to load
load([eraFolder sprintf('Y%dD%d-pEraSD.mat',year,day)], 'pEraSD');
Run Code Online (Sandbox Code Playgroud)
使用Profiler,我可以看到前两个变量在365次调用中加载5420秒,而最后两个变量分别在365次调用中加载6和4秒.当我交换加载变量的顺序时,例如eEraSD之前tempSD,它仍然是前两个加载需要更多时间.
当tic toc用于跟踪加载所花费的时间时,加载第一个或第二个变量的时间似乎随着调用次数呈指数增长(最后一次调用需要50秒才能运行).对于第三个和第四个变量,加载时间保持在每个文件大约0.02-0.04秒,或多或少独立于我已经去过的for循环的距离.见下图.
当使用importdata而不是'load'时,第一行需要大约8000秒才能加载365次(加载量呈指数增长,如第二幅中的T所示).然后其他线路需要大约10秒钟才能加载365次.
我不明白为什么它看起来这样,我可以做些什么来减少加载时间.非常感谢任何可能的解决方案的想法.
所以我一直在尝试将这个特殊的.mat文件读入R.我不太了解matlab,但我知道R.matlab包只能将未压缩的数据读入R,并将其保存为未压缩我需要通过使用在matlab中保存它
save new.mat -v6.
好吧,所以我这样做了,但是当我readMat("new.mat")在R中使用时,它只是被卡住了永远.我也尝试过使用包hdf5:
> hdf5load("new.mat", load=FALSE)->g
Error in hdf5load("new.mat", load = FALSE) :
can't handle hdf type 201331051
Run Code Online (Sandbox Code Playgroud)
我不确定这个问题是什么,但如果有人想要弄清楚这个问题,那么该文件位于http://dibernardo.tigem.it/MANTRA/MANTRA_online/Matlab_Code%26Data.html ,称为库存. mat(第一个文件).
谢谢你的帮助!
我目前正在开发一个涉及保存/加载相当大的MAT文件(大约150 MB)的项目,我意识到访问加载的单元格数比在脚本或函数内创建的等效版本要慢得多.
我创建了这个例子来模拟我的代码并显示差异:
clear; clc;
disp('Test for computing with loading');
if exist('data.mat', 'file')
delete('data.mat');
end
n_tests = 10000;
data = {};
for i=1:n_tests
data{end+1} = rand(1, 4096);
end
% disp('Saving data');
% save('data.mat', 'data');
% clear('data');
%
% disp('Loading data');
% load('data.mat', '-mat');
for i=1:n_tests
tic;
for j=1:n_tests
d = sum((data{i} - data{j}) .^ 2);
end
time = toc;
disp(['#' num2str(i) ' computed in ' num2str(time) ' s']);
end
Run Code Online (Sandbox Code Playgroud)
在此代码中,不保存或加载MAT文件.i上一次迭代的平均时间是0.75秒.当我取消注释保存/加载文件的行时,i上一次迭代的计算大约需要6.2秒(不考虑保存/加载时间).相差8倍!
我使用的是带有Windows 7 64位的64位MATLAB 7.12.0(R2011a),并且使用版本v7.3保存了MAT文件.
它可以与MAT文件的压缩相关吗?还是缓存变量?有没有办法防止/避免这种情况?
我有一个结构存储在我的硬盘上.我需要将其中一个Field加载到局部变量中.一个简单的负载得到了
% 'PRICES' is the stored struct. 1st fieldname is '.Raw'.
% Only '.Raw' needs to be loaded
var = load( fullfile(path, 'PRICES.Mat') ) % Wrong as var becomes a struct containing a struct.
% DESIRED value: var = PRICES.Raw ;
Run Code Online (Sandbox Code Playgroud)
是否可以一步完成?我可以覆盖var并完成这个,但有没有直接的方法呢?谢谢.
我有110个名为time1.mat,time2.mat ...,time110.mat的文件.我想将这些矩阵加载到MATLAB工作区中.
我一直习惯load -'ASCII' matrix.mat在当前文件夹中加载ASCII矩阵文件.
所以我尝试了
for i=1:10
filename=strcat('time',int2str(i),'.mat');
load -'ASCII' filename
end
Run Code Online (Sandbox Code Playgroud)
但我得到一个MATLAB错误
??? Error using ==> load
Unable to read file filename: No such file or directory.
?
Run Code Online (Sandbox Code Playgroud)
当然字符串filename似乎由MATLAB正确评估为time1.mat.在第一次迭代中,它在负载线上崩溃.
有什么建议我应该怎么做?
我正在尝试加载以下数据集:
阿富汗,5,1,648,16,10,2,0,3,5,1,1,0,1,1,1,0,绿色,0,0,0,0,1,0,0,1, 0,0,黑色,绿色
阿尔巴尼亚,3,1,29,3,6,6,0,0,3,1,0,0,1,0,1,0,红色,0,0,0,0,1,0,0, 0,1,0,红色,红色
阿尔及利亚,4,1,2388,20,8,2,2,0,3,1,1,0,0,1,0,0,绿色,0,0,0,0,1,1,0, 0,0,0,绿,白
...
问题是它包含整数和字符串.我找到了一些关于如何只取出整数的信息.但是还没有看到是否有任何方法可以获得所有数据.
我的问题是可能吗?
如果那是不可能的,那么有没有办法找到每一行的数字并扔掉其他所有而不必选择列?
我需要具体,因为我似乎不能一次使用str2num整行.
我的目录中有100个ASCII文件,全部命名如下:
int_001.ASC
int_002.ASC
int_003.ASC
.
.
.
int_099.ASC
int_100.ASC
我必须使用importdata在MATLAB中导入它们,它应该如下工作:
A = importdata('int_001.ASC', ' ', 9)
x = A.data(:,1)
y = A.data(:,2)
Run Code Online (Sandbox Code Playgroud)
我的问题是:我怎么能避免写100次importdata?有没有办法只写第一个字符串,然后上传所有数据?
谢谢