2013-04-05 88 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