我有一个50x3的矩阵,我想相反地将第一列排序为其他两列的总和。也就是说,假设我们有A、B和C列。A,我把B和C相加。所以我有两列(50x2)。接下来,使用50x2矩阵,我想重新排列A,使其与第二列(通过将B和C相加得到的列)的顺序相反。如果满足以下条件,则两个向量a,b是相反顺序的
(a_j - a_k)(b_j - b_k) ≤ 0 , ∀ 1≤j,k≤N Where N=50,j=2.例如X= 15.2221,49.0000,12.3631;20.3201,22.5702,30.6228;12.1306,9.4257,10.3228;16.1499,21.3606,11.5000;16.6777,30.6228,13.4338
使用第一列,取其他两列的总和。因此我们有一个新矩阵Y= 15.2221,61.3631;20.3201,53.1930;12.1306,19.7485;16.1499,32.8606;16.6777,44.0565
仅重新排列第一列,以便
(y11-y12)(y21-y22) <= 0 y11-y13)(y21-y23) <= 0,e.t.c
最后,我们有了一个新的矩阵Y,其中第一列被重新排列,而第二列保持不变。例如
Y= 15.2221,61.3631;16.1499,53.1930;20.3201,19.7485;16.6777,32.8606;12.1306,44.0565
我希望你能理解我的解释。我想导入到目前为止我在matlab上所做的工作,但我还在学习基础知识。
发布于 2015-04-28 19:47:03
因此,首先,您需要2 x 50矩阵:
X =
[15.2221 49.0000 12.3631;
20.3201 22.5702 30.6228;
12.1306 9.4257 10.3228;
16.1499 21.3606 11.5000;
16.6777 30.6228 13.4338]
Xtransform = [X(:,1),(X(:,2)+X(:,3))]; %//This generates 2 by 50 Matrix接下来,您希望重新排序第一列,使(y11-y12)(y21-y22) <= 0(根据我的理解),因此需要一些数学运算:
您希望使用v1和v2的所有可能组合来构造函数:
C1 = nchoosek(v1,2);
C2 = nchoosek(v2,2);
%//Do y11-y12
CC1 = C1(:,1) - C1(:,2);
%//Consider backwards
CB1 = C1(:,2) - C1(:,1);
%//Do y21-y22
CC2 = C2(:,1) - C2(:,2);
%//Consider backwards
CB2 = C2(:,2) - C2(:,1);
%//CC1 *CC2 should return negative or zero
CC = find(CC1.*CC2 < 0);
CB = find(CB1.*CC2 < 0);
%//The indexes returned are possible v1 and v2 combinations that fullfills the required function.所以我来到了这一点,并想知道如果这个问题可以充满多种解决方案。如果有多个排序来完成函数,那么正确的排序方式应该是什么呢?
有了索引,您可以查看C1和C2来查看哪个ajk和bjk值填充了函数。
https://stackoverflow.com/questions/29915379
复制相似问题