2013-03-22 67 views
0

是否有一種在matlab中處理這個特定問題的有效方法。將類似輸入映射到類似輸出的高效方法

我試圖此矩陣或可能的陣列BeansRice(見下文)

Beans={0:1,0:1,0:2,0:2,0:2,0:2,0:1,0:1,0:2,0:2} 
[a b c d e f g h i j ] = ndgrid(Beans{:}) 
BeansRice = [a(:) b(:) c(:) d(:) e(:) f(:) g(:) h(:) i(:) j(:)] 

映射到矩陣/陣列BR(見下文)

BR=[abc, de, fg, hij]; 

其中如果列A,B和c每個都有值0(關係首選項),我偏好c> b> a。如果所有列a,b和c各自具有值1(沒有偏好),則BR(1)= 1。如果列a和b的值爲0,列c的值爲2,則BR(1)= 2。如果列a和b的值爲1,列c的值爲2,則BR(1)= 1。

我有一個if函數與索引,但我想如果有可能改善它,使用矩陣中的值排序/順序來打破關係。尋找更高效的流程,因爲這只是大問題的一個小部分。

回答

0

您可以使用邏輯索引而不是if條件。例如

BR1(a==1 & b==1 & c==1)=1 
BR1(a==0 & b==0 & c==2)=2 
BR1(a==1 & b==1 & c==2)=1 
... 

然後再處理其他部分,BR2(d==... & e>...)=##,然後串聯,以獲得您所需要的

BR=[BR1(:) BR2(:) ...]

等等