【问题标题】:Assign array in MATLAB在 MATLAB 中分配数组
【发布时间】:2011-10-24 09:59:46
【问题描述】:

我对以下代码有疑问。

[name file] = uigetfile('*', 'Select an image');
if [name file] ~= 0
    %file found
end

有没有办法说 [name file] 可以分配给一个数组?例如,Filepath[2] = ui.getfile..(这不起作用)。

当我尝试以下代码时,我只得到文件名而不是路径。我声明这个数组有错吗?

Filepath{2} = uigetfile({'*.wav;*.mp3;*.aac;*.ogg'}, 'Select a file');
%Filepath{2} = uigetfile('*', 'Select an image');
%noFile = Filepath(0);
%if Filepath[1]~= 0
%if Filepath ~= 0

disp('Loading signal');
disp(Filepath);
%disp(Filepath{0});
disp('Filepath{1}');
disp(Filepath{1});
disp('Filepath{2}');
disp(Filepath{2});

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我认为您可能对函数的多个“输出参数”的语法感到困惑。与大多数编程语言不同,MATLAB 允许函数有多个返回值;这些被称为输出参数。当您有一个函数[a b] = foo(x) 时,最好将其视为将第一个输出发送到一个名为a 的变量并将第二个输出发送到一个名为b 的变量的语法。尽管[a b] 的语法看起来像一个数组,但最好不要这样想。

    这是uigetfile 的示例:

    [filename, pathname] = uigetfile('*.m', 'Select a file');
    

    它给出了所选文件的文件名和路径,变量分别称为filenamepathname

    filename =
    
    foo.m
    
    
    pathname =
    
    /home/tobin/
    

    但我不明白的是,如果取消,则此方法返回零,如果成功,则返回填充数组。那么如何检查是否为零(找不到文件)?

    为什么不试试呢?

    > [filename, pathname] = uigetfile('*', 'Select a file')
    
    filename =
    
         0
    
    
    pathname =
    
         0
    

    如果uigetfile 被取消,两个输出似乎都是0。所以你可以这样做:

    [filename, pathname] = uigetfile('*', 'Select a file');
    fullname = horzcat(pathname, filename);
    if filename == 0
        fprintf('uigetfile was cancelled.\n');
    else
        fprintf('user selected "%s".\n', fullname);
    end
    

    【讨论】:

    • 有没有办法全球化这些变量[文件名,路径名],以便我可以在其他方法中访问它们?我尝试像在其他编程语言中一样在顶部声明它们,但这没有用;在 'm 前面输入 global 也不起作用。
    • 在Matlab中不需要声明变量,也没有任何办法。
    • 如果你做global filename pathname,那么filenamepathname将成为全局变量。与其他编程语言不同,您必须将global filename pathname 行放在将访问这些全局变量的every 函数中。参见,例如:stackoverflow.com/questions/4911926/…
    • 现在我明白了。最后一个问题,您能否向我推荐(或写信给我)一个使用自定义函数的好 sn-p?我想创建一个打开文件的方法,然后总是更改全局变量,而不是每次我不想打开文件时复制粘贴代码。
    • 要制作自定义函数,您通常会将代码放在专用文件中。例如,函数myfunction 将存在于myfunction.m 中。有关如何在该文件中声明函数的示例,请参阅mathworks.com/help/techdoc/ref/function.html
    【解决方案2】:

    MATLAB 中的数组访问对“普通”数组使用括号,对cell arrays 使用花括号。 “普通”数组只能保存数值,因此您必须使用元胞数组——试试Filepath{2} = uigetfile(...)

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2023-04-01
      • 2016-05-10
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多