matlab - 如何获得矩阵的唯一切片?

标签 matlab matrix language-features built-in

在 matlab 中,如果您有一个矩阵 A,您可以找到包含 A 的所有唯一行的矩阵 B,如下所示:

B = unique(A,'rows');

我有一个 3d 矩阵,其中行和列作为前两个维度,还有一个附加维度(“切片”)。

如何获得包含矩阵 A 中所有唯一切片的 3d 矩阵?这是我想要的那种功能的示例:

>> A % print out A
A(:,:,1) =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1


A(:,:,2) =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1


A(:,:,3) =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1


A(:,:,4) =

     0     0     0     1
     0     0     1     0
     0     1     0     0
     1     0     0     0

>> unique(A,'slices'); % get unique slices

A(:,:,1) =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1


A(:,:,2) =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1


A(:,:,3) =

     0     0     0     1
     0     0     1     0
     0     1     0     0
     1     0     0     0

最佳答案

我将从 reshape A 开始,使每个切片成为一行(使用 reshape 命令)。然后使用 unique(A, 'rows')。最后,将独特的行 reshape 为与切片相同的形状。

例如:

% transforming so each row is a slice in row form
reshaped_A = reshape(A, [], size(A, 3))';

% getting unique rows
unique_rows = unique(reshaped_A, 'rows');

% reshaping back
unique_slices = reshape(unique_rows', size(A, 1), size(A, 2), []);

或者全部在一行中:

reshape(unique(reshape(A, [], size(A, 3))', 'rows')', size(A, 1), size(A, 2), [])

我没有检查上面的代码,所以谨慎使用!但它应该给出想法。


编辑

它正在处理您的数据(还修复了上面代码中的小错误):

>> reshaped_A = reshape(A, [], size(A, 3))'

reshaped_A =

Columns 1 through 11

16     5     9     4     2    11     7    14     3    10     6
 1     0     0     0     0     1     0     0     0     0     1
16     5     9     4     2    11     7    14     3    10     6
 0     0     0     1     0     0     1     0     0     1     0

Columns 12 through 16

15    13     8    12     1
 0     0     0     0     1
15    13     8    12     1
 0     1     0     0     0

这些 ^^ 行中的每一行都是原始切片之一

>> unique_rows = unique(reshaped_A, 'rows')

unique_rows =

Columns 1 through 11

 0     0     0     1     0     0     1     0     0     1     0
 1     0     0     0     0     1     0     0     0     0     1
16     5     9     4     2    11     7    14     3    10     6

Columns 12 through 16

 0     1     0     0     0
 0     0     0     0     1
15    13     8    12     1

这些 ^^ 是独特的切片,但形状不对。

>> unique_slices = reshape(unique_rows', size(A, 1), size(A, 2), [])

unique_slices(:,:,1) =

 0     0     0     1
 0     0     1     0
 0     1     0     0
 1     0     0     0


unique_slices(:,:,2) =

 1     0     0     0
 0     1     0     0
 0     0     1     0
 0     0     0     1


unique_slices(:,:,3) =

16     2     3    13
 5    11    10     8
 9     7     6    12
 4    14    15     1

关于matlab - 如何获得矩阵的唯一切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422392/

相关文章:

programming-languages - "Active expressions"的编程语言或库

python - 运行 python pyd 模块的几个独立实例

matlab - playaudio()函数在 Octave 中不起作用

c++ - 从 C++ 调用 MATLAB 错误 : unresolved external symbol

matlab - matlab 图像中的自主接缝检测

tensorflow - 如何在 tensorflow 中的二维张量中找到前 k 个值

performance - 计算矩阵中每个值实例之间的行数

opencv - 在 OpenCV 中向矩阵添加一行

programming-languages - 这种语言有其利基市场吗? future ?

javascript - Javascript "for...of"循环什么时候在 Chrome Chrome 中实现?