【问题标题】:Ranking two vectors of numbers relative to each other in MATLAB在MATLAB中对两个数字向量进行相对排名
【发布时间】:2014-06-24 11:02:56
【问题描述】:

我有两组数字,想在MATLAB 中比较和排列它们相对于彼此

数据是:

x = [3 7 8 25 33 52 64 65 78 79 91 93];
y = [7 10 12 27 30 33 57 62 80 83 85 90];

我从for/if/else 命令开始,卡在了中间。 换句话说,我想通过MATLAB得到答案,第一组(x)的数字比第二组(y)的数字大多少倍。

我开始进行排序等。

n1 = length(data1);
n2 = length(data2);

xs = sort(x);
ys = sort(y);

r1 = zeros(1,n1);
r2 = zeros(1,n2);

我愿意使用除这种排序和for/if/else 之外的其他命令,这并不重要,只是需要一些正确方向的帮助。

【问题讨论】:

    标签: matlab sorting vector sum ranking-functions


    【解决方案1】:

    我不完全确定我是否理解您在那里尝试做的事情。假设这两个向量大小相同是否安全?

    您可以简单地对 2 个已排序的向量进行元素除法,然后从那里获取统计信息。 例如: div = xs./ys; max_div = max(div) mean_div = mean(div)

    这等效于运行一个 for 循环并将 xs 数组中的每个元素除以 ys 数组中的每个元素以获取相应的索引。 'max' 和 'mean' 显然是最大商和平均商。

    【讨论】:

      【解决方案2】:

      在 MATLAB 中,求向量 x 中的每个数字比向量 y 中的数字大多少次:

      sum(x > y.')
      

      这使用 y 的转置来创建一个 size(x) x size(y) 矩阵,当 x 中的一个数字大于 y 中的一个数字时,它的值为 1,然后对每一列求和。

      对于您的数据,结果是以下向量,x 中的每个数字都有一个项目:

      [0 0 1 3 5 6 8 8 8 8 12 12]

      向量 x 和 y 不必排序。如果您需要总次数,只需将 sum 再次应用于结果即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多