在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 :(得分: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(:) ...]
等...