2013-04-05 89 views
1

MATLAB问题:如何在matlab中设置很长的属性和值列表

比方说,我有一个很长的单元格数组中的属性名称列表。

properties = {'property01','property02','property03',....,'property50'};

以及每个属性的对应值。

values = [val01,val02,val03,....,val50];

现在我有一个函数,它根据一定的条件,将不同数量的属性作为输入。正确使用该函数的主要限制之一是只要将所有需要的属性作为输入输入,就只调用一次。 (所以我不能在for循环中调用函数,每次循环不同的属性设置)

例如如果某些条件强迫我用4个属性,那么正确的用法是:

输出= someFunction(数据, 'property01',val01, 'property02',val02, 'property03',val03, 'property04', val04);

如何为函数提供可变数量的属性,该函数只能被调用一次?

MAYUR Narsude

回答

0

我认为你正在寻找varargin。将它用作函数定义中的输入变量之一将允许您使用不同数量的输入调用该函数。

1

尝试这种情况:

pv = [properties;values]; 
output = someFunction(data, pv{:}); 

基本上,创建2×N个细胞阿雷,并且当它被线性化的属性和值交替。

(这是主叫方。函数定义里面,你会用varargin作为另一个答案建议。我想这是不明确的,你在问你的问题。)

+0

感谢@nhowe为诀窍。 在我的情况下,pv在第一行包含char字符串,在第二行它包含一个包含我想要传递的非常大的矩阵的单元格。简而言之:properties = string和value = cell 所以当我按照你的建议把它传递给函数时,它显然不会在传递之前转换cell2mat,然后函数调用变成无稽之谈,因为它期望一个矩阵作为值。我无法访问可以在将它传递给函数后对其进行修改的函数。还有什么想法? 干杯,Mayur – 2013-04-07 21:52:06

+0

不太确定我了解您的意见。你能举出一个具体的参数类型的例子吗? – nhowe 2013-04-08 03:15:24

+0

> pv = [properties; values]; > properties = ['prop1','prop2','prop3',...,'propN']; > values = [val1,val2,val3,...,valN]; > whos val1 > cell double 因此,基本上val1至valN每个都是包含所谓1x2000值矩阵的单元格。这意味着, > output = someFunction(data,pv {:}); 生成错误。所有属性都以字符串形式传递,这是正确的。但是所有的值都作为单元格传递,其中as函数期望值为矩阵。所以我需要一个机制来转换单元格中的值,然后再将它传递给函数。很显然,在pv上使用cell2mat不是解决方案。 – 2013-04-08 15:53:57