假设我在Matlab中有以下向量:
V = [4, 5, 5, 7];
如何列出(在n-by-2矩阵中)所有与向量中不等元素对应的索引对。例如,对于该特定向量,索引对将是:
index pairs (1, 2) and (1, 3) corresponding to element pair (4,5)
index pair (1, 4) corresponding to element pair (4,7)
index pairs (2, 4) and (3, 4) corresponding to element pair (5,7)
我需要这个的原因是因为我有一个成本函数,它将V
之类的向量作为输入并产生成本值。
我想看看矢量中两个不同的元素的随机交换如何影响成本值(使用它来进行最陡的下坡爬坡)。
索引对的顺序也无关紧要。出于我的目的,(1,2)
与(2,1)
相同。
例如,如果我的费用函数是evalCost()
,那么我可以V = [4, 5, 5, 7]
和
evalCost(V) = 14
而W = [4, 7, 5, 5]
费用可能是:
evalCost(W) = 10
如何在Matlab中获取“交换”对索引列表。希望我的问题很清楚=)
答案 0 :(得分:3)
我不了解成本函数部分,但第一部分很简单:
[a,b]=unique(V)
C = combnk(b,2)
C
包含索引,V(C)
包含值:
C = combnk(b,2)
C =
1 2
1 4
2 4
V(C)
ans =
4 5
4 7
5 7
答案 1 :(得分:1)
使用bsxfun
然后使用find
的双输出版本来获取对。 triu
适用于bsxfun
的输出,仅考虑两个可能的订单中的一个。
[ii jj] = find(triu(bsxfun(@ne, V, V.')));
pairs = [ii jj];