【问题标题】:Subdivide matrix rows according to object ranks根据对象等级细分矩阵行
【发布时间】:2014-10-26 10:24:40
【问题描述】:

我想更新this question 中的问题,这与this question 中的建议部分相关。

M 为 MATLAB 矩阵,例如:

1 2 3
1 2 4
3 2 5
3 5 4
1 4 5

我想有效地M的行分成两组,这样:

  • 在第一组M(A>B) 中的所有行中:
    • 元素A 的排名高于元素B(如果这两个元素都存在)
    • 或者元素 A 存在而元素 B 不存在
    • 或者AB这两个元素都不存在
  • 在第一组M(B>A) 中有所有行:
    • 元素 B 的排名高于元素 A(如果这两个元素都存在)
    • 或者元素 B 存在而元素 A 不存在
    • 或者AB这两个元素都不存在

在上面给出的例子中,如果A=2B=3,第一组M(A>B)定义为:

1 2 3
1 2 4
1 4 5

而第二组M(B>A)定义为:

3 2 5
3 4 5
1 4 5

请注意,在我的例子中,矩阵 M 非常大,因此基于 ismember 的解决方案不够快。

【问题讨论】:

    标签: performance matlab matrix


    【解决方案1】:

    试试这个:

    [val2, ind] = max((M==A) | (M==B), [], 2);
    val1 = val2;
    val1(val1) = M((ind(val1)-1)*size(M,1) + find(val1))==B;
    set1 = M(~val1, :);
    val2(val2) = M((ind(val2)-1)*size(M,1) + find(val2))==A;
    set2 = M(~val2, :);
    

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 2021-06-29
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      相关资源
      最近更新 更多