如何在Matlab中对两个向量进行相反的排序?

时间:2015-05-12 17:01:11

标签: matlab

我有以下代码用于反向排序两个向量。它有效,但我想指定一行

B_diff(i) = B(i) - B(i+1); 

坚持不仅仅是为了 B_diff(i) = B(i) - B(i+1);但是 B_diff(i) = B(i) - B(i+k);其中k可以是小于或等于n的任何整数。这同样适用于“A”。关于如何在程序中实现这一点的任何线索?

例如,我想重新排列矩阵的第一列

A =

     1     4
     6     9
     3     8
     4     2

这样,条件不仅适用于

(a11-a12)(a21-a22)<=0;

但也适用于所有

(a11-a13)(a21-a23)<=0;
(a11-a14)(a21-a24)<=0;
(a12-a13)(a22-a23)<=0;
(a12-a14)(a22-a24)<=0; and
(a13-a14)(a23-a24)<=0;

       ## MATLAB CODE ##
A = xlsread('column 1');
B = xlsread('column 2');

n = numel(A);

B_diff = zeros(n-1,1); %Vector to contain the differences between the elements of B
count_pos = 0; %To count the number of positive entries in B_diff
for i = 1:n-1
    B_diff(i) = B(i) - B(i+1);
    if B_diff(i) > 0
        count_pos = count_pos + 1;
    end
end

A_desc = sort(A,'descend'); %Sort the vector A in descending order

if count_pos > 0    %If B_diff contains positive entries, divide A_desc into two vectors
    A_less = A_desc(count_pos+1:n);
    A_great = sort(A_desc(1:count_pos),'ascend');
    A_new = zeros(n,1); %To contain the sorted elements of A
else
    A_new = A_desc; %This is then the sorted elements of A
end

if count_pos > 0
    A_new(1) = A_less(1);
    j = 2;  %To keep track of the index for A_less
    k = 1;  %To keep track of the index for A_great
    for i = 1:n-1
        if B_diff(i) <= 0
            A_new(i+1) = A_less(j);
            j = j + 1;
        else
            A_new(i+1) = A_great(k);
            k = k + 1;
        end
    end
end

A_diff = zeros(n-1,1);
for i = 1:n-1
    A_diff(i) = A_new(i) - A_new(i+1);
end

diff = [A_diff B_diff]
prod = A_diff.*B_diff

1 个答案:

答案 0 :(得分:0)

以下代码命令A的第一列与第二列的顺序相反。

A= [1 4; 6 9; 3 8; 4 2];       % sample matrix
[~,ix]=sort(A(:,2));           % ix is the sorting permutation of A(:,2)
inverse=zeros(size(ix));
inverse(ix) = numel(ix):-1:1;  % the un-sorting permutation, reversed  
B = sort(A(:,1));              % sort the first column
A(:,1)=B(inverse);             % permute the first column according to inverse      

结果:

A =

     4     4
     1     9
     3     8
     6     2