如何将此脚本转换为MATLAB函数?

时间:2011-04-03 02:39:21

标签: matlab

如何将此脚本转换为MATLAB函数?

clear all;

set={AB02XY_1,ZT99ER_1,UI87GP_1};

fileData1 = load([fileString set{1} '.mat']);  
fileData2 = load([fileString set{2} '.mat']);  
fileData3 = load([fileString set{3} '.mat']);  

[A,B] = myfunction1_1(fileData1,fileData2,fileData3);

fileName = 'C:\Users\Documents\MATLAB\matrice_AAA001.mat';  
save(fileName,'A','B');

clear all;  

set={AB02XY_2,ZT99ER_2,UI87GP_2};

fileData1 = load([fileString set{1} '.mat']);  
fileData2 = load([fileString set{2} '.mat']);  
fileData3 = load([fileString set{3} '.mat']);  

fileData4 = load('C:\Users\Documents\MATLAB\matrice_AAA001.mat');

[A,B] = myfunction1_2(fileData1,fileData2,fileData3,fileData4);

fileName = 'C:\Users\Documents\MATLAB\matrice_AAA001.mat';  
save(fileName,'A','B');

我对大数据文件进行处理,然后为了避免错误“内存不足”,我将每个文件分成两部分,并在每个阶段的开头使用'clear all'。所以,我想要的是一个函数AAA001 = function (AB02XY, ZT99ER, UI87GP, MyFunction1)。 我的问题是我必须为其他数据文件编写相同的脚本。那么,有没有办法构建一个函数,我只需要更改文件名AB02XY,ZT99ER,UI87GP,并使用'MyFunction1'函数的名称进行子处理,以获得文件AAA001的最后一步。 / p>

注意:我简化了我的脚本,但实际上我将每个文件分为5个部分。所以我想在一个函数中转换我脚本的5个部分!!!

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是一种方法。调用函数

 output = function ({'AB02XY', 'ZT99ER', 'UI87GP'}, 5, MyFunction1);

请注意,我假设您需要5个文件部分

function out = myMainFunction(fileList, nParts, fun2run)
%# myMainFunction calculates output from multiple split files
%
%# SYNOPSIS out = myMainFunction(fileList, nParts, fun2run)
%#
%# INPUT    fileList: cell array with file body names, e.g.
%#                    'AB02XY' for files like 'AB02XY_1.mat'
%#          nParts  : number of parts in which the files are split
%#          fun2run : function handle or name. Function has to 
%#                    accept lenght(fileList) arguments plus one
%#                    that is the output of the previous iteration
%#                    which is passed as a structure with fields A and B
%#
%# OUTPUT   out : whatever the function returns
%#
%# Brought to you by your friends from SO


%# input checking should go here

if ischar(fun2run)
   fun2run = str2func(fun2run);
end

nFiles = length(fileList);


for iPart = 1:nParts

data = cell(nFiles,1);
for iFile=1:nFiles

data{iFile} = load(sprintf(%s_%i.mat',fileList{iFile},iPart));

end

if iPart == 1
   %# call fun2run with nFiles inputs
   [out.A,out.B] = fun2run(data{:});
else
   %# fun2run wants the previous output as well
   [out.A,out.B] = fun2run(data{:},out);
end

end %# loop parts

答案 1 :(得分:0)

如果我理解正确,这个函数的主要挑战是正确组装文件名,并传递应该调用的函数,对吧?如果将数据文件的名称作为字符串传递,则可以使用sprintf汇编文件名,如:

dataSetName = 'AAA001';
dataFilename = sprintf('C:\path\to\datafolder\%s.mat', dataSetName);

对于该功能,您可以将function handle作为参数传递给您的函数。例如,考虑定义一个函数:

function c = apply_fun(fun, a, b)
c = fun(a, b);
end

例如,您可以将maxmean视为func,如下所示:

>> apply_fun(@max, 1, 2)

ans =

     2

>> apply_fun(@min, 1, 2)

ans =

     1

即,传递max的引用(使用@max),然后在我们定义的apply_fun函数中使用它。

此外,您在函数内部不需要clear all,因为它已经有另一个范围。

希望这能帮到你!