【问题标题】:Sorting a 3D matrix by only the first row MATLAB仅按第一行 MATLAB 对 3D 矩阵进行排序
【发布时间】:2015-04-09 00:08:06
【问题描述】:

我无法按我想要的任何行对 3D 矩阵进行排序,但其他两列仍然与已排序的行匹配。

ex)排序前:

    5 4 1 
    4 6 3
    9 6 5

排序后:

    1 4 5
    3 6 4
    5 6 9

所以只有第一行按升序排序,其他两行只是留在各自的列中。

我尝试过 sort(Matrix(1,:,:)),但这似乎对所有三行都进行了排序。我猜有一些 matlab 函数可以做到这一点,但我还没有找到任何东西。谢谢

【问题讨论】:

  • 澄清一下,这里有一个二维矩阵。
  • 我的错误,我正在处理尺寸为 100x100x3 的彩色图像。 3代表红绿蓝。同样的问题
  • 好的,那么我在下面的回答应该对您有所帮助。我会编辑它。
  • 非常感谢
  • 不客气!

标签: matlab sorting matrix


【解决方案1】:

您可以使用带有sort 的输出参数来根据需要对矩阵进行索引重新排序。

例子:

clear
clc

a = [5     4     1
     4     6     3
     9     6     5]

 %// Select row of interest
 row = 1;

 [values,indices] = sort(a(row,:)) %// Since you have a 3D matrix use "a(row,:,:)"

 b = a(:,indices) %// In 3D use "b = a(:,indices,:)"

输出:

b =

     1     4     5
     3     6     4
     5     6     9

【讨论】:

  • 小问题,在 b = a(:, indices, : ) 为什么索引放在中间?
  • 因为索引对应于列,这是第二维:)
【解决方案2】:

使用sortrows的另一种方法

%// Input
a = [5     4     1
     4     6     3
     9     6     5]

%// code
sortrows(A.').'           %// for 2D

%// Results:
 1     4     5
 3     6     4
 5     6     9
------------------------------------------------
[t,ind] = sortrows(A(:,:,1).')    %// for 3D
A(:,ind,:)

【讨论】:

  • 这也是我的方法
  • @LuisMendo 谢谢.. 这是对我的极大赞美:)
猜你喜欢
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多