【问题标题】:find the rank of an element in a vector in matlab在matlab中找到向量中元素的等级
【发布时间】:2015-04-23 05:51:52
【问题描述】:

我的任务是按以下方式组合两个向量。输入是两个向量,第一个表示组的除数的索引,第二个表示我们试图分类的元素。例如向量 [1,3,5,9] 表示第一组由 1 组成,第二组由 2 和 3 组成,第三组由 4 和 5 组成,第四组由 6、7、8 组成和9等。在这种情况下,如果第二个向量是[2,4,6],那么我们得到的输出是[2,3,4]。
我知道如何在 matlab 中使用 for 循环来实现这一点。我的问题是:有没有 for 循环可以做到这一点?非常感谢您的时间和关注。

编辑:

scaleVtr=[1,3,5,9];
>> eltVtr=[2,4,6];
>> j=1; output=[];
>> for i=1:size(eltVtr,2)
      while(true)
        if eltVtr(i)<=scaleVtr(j)
           output= [output,j];
           break;
        else j=j+1;
        end
      end
   end
>> output

output =

     2     3     4

【问题讨论】:

  • 用您的玩具示例发布您的循环代码。同时发布代码以生成玩具示例数据。
  • @krisdestruction,这是一个玩具示例。主要任务是我有许多序列,每个序列都有一定的多重性。考虑到多样性,我需要生成它的随机样本。因此,将所有序列一组一组(相同的序列形成一个组)并一个接一个地放在一起,我使用 randomsample 函数来生成序列的索引,在玩具示例中,它将是 2、4 和 6 . 然后,我需要回去确定组索引。这就是这里发生的事情。
  • 这个模式很复杂,不用单步执行代码,如果你贴一个更长的向量,也许我会看到它?我正在运行循环版本,可以重现您的输出。
  • 我认为这是一个常见的操作。也许matlab团队可以添加一个函数来处理这个问题。

标签: matlab


【解决方案1】:
qq = [1 3 5 9]; 
qq2 = [2 4 6];
ceil(interp1(qq,1:numel(qq),qq2))

【讨论】:

  • 哦,哈哈,如果就这么简单,我明白他现在想做什么了
  • 非常感谢 hiandbaii。
【解决方案2】:

这也可以通过bsxfun来完成:

v1 = [1,3,5,9];
v2 = [2,4,6];
result = sum(bsxfun(@gt, v2(:).', v1(:)), 1) + 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多