我在 Matlab 中有一个 3D 矩阵来存储一系列 2D 数组。我必须找到最大值及其行和列索引,这对于包含二维数组的单个变量来说非常简单,如
A = rand(10,10);
[m,i] = max(A(:));
[I,J] = ind2sub( size(A) , i )
问题是我不能对 3D 矩阵使用这种语法
A = rand(10,10,3);
[m,i] = max( A(:,:,1)(:) );
[I,J] = ind2sub(size( A(:,:,1) ), i )
Error: ()-indexing must appear last in an index expression.
我可以创建一个临时变量来存储 2D 切片,但我想我会看看是否有更好的方法来做到这一点,也许调用 reshape ?有什么方法可以在这种情况下使用简单的线性化/展平运算符 (:)
吗?
最佳答案
这是我要做的:
[B i]=max(reshape(A,[],size(A,3)));
[II,JJ]=ind2sub(size(A),i );
唯一的限制是它不能很好地处理每个 2D 切片有多个最大值的情况。
关于matlab - 从 3D 矩阵变量切片时将 2D 矩阵展平为 1D 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31597692/