【问题标题】:Find extremum of multidimensional matrix in matlab在matlab中找到多维矩阵的极值
【发布时间】:2014-02-09 16:42:48
【问题描述】:

我正在尝试沿第二维查找 3 维矩阵的极值。

我从 [~,index] = max(abs(mat),[],2),但我不知道如何从这里前进。索引向量如何与原始矩阵一起使用。或者这个问题有完全不同的解决方案吗?

为了说明任务假设以下矩阵:

mat(:,:,1) =
    23     8    -4
    -1   -26    46
mat(:,:,2) =
     5   -27    12
     2    -1    18
mat(:,:,3) =
   -10    49    39
   -13   -46    41
mat(:,:,4) =
    30   -24    18
   -40   -16   -36

预期的结果将是

ext(:,:,1) =
    23
   -46
ext(:,:,2) =
   -27
    18
ext(:,:,3) =
    49
   -46
ext(:,:,4) =
    30
   -40

我不知道如何使用index 向量和mat 来获得所需的结果ext

【问题讨论】:

  • 我不明白你的问题到底是什么。你想找到最大维度的最大值,然后呢?
  • 我想找到沿第二维的绝对值的最大值乘以符号。

标签: matlab max minimum


【解决方案1】:

1) 如果你想找到一个最大值,比如说二维维度,你的变量index 将是一个具有维度 (N,1,M) 的矩阵,其中 N 和 M 是你的元素的数量分别是第一维和第三维矩阵。为了删除虚拟维度,存在函数squeeze():index=squeeze(index) 之后size(index) 给出N,M

2) 根据您的问题,您可能需要 matlab 函数 ind2sub()。首先,你取矩阵的一部分,然后用线性索引找到它的最大值,然后你可以用 int2sub() 恢复你的索引。下面是一个二维矩阵的例子:

M = randn(5,5);
[C,I] = max(M(:));
[index1,index2] = ind2sub(size(M),I);

同样的方法可以在整个 3D 矩阵中找到绝对最大元素。

【讨论】:

  • 我不确定这是否能回答我的问题。正确的解决方案将产生一个 2-dim 数组,而在您的代码中将矩阵视为 1-dim 只返回一个标量(或它的索引)。
  • 我已经添加了更多...希望它有用
  • 我知道挤压功能。所以挤压之后就是一个NxM矩阵。我该怎么办?
  • 我猜没什么。这不是你想要得到的吗?现在,您知道了一维中所有最大元素的坐标。
  • 矩阵 (N,M) 的每个元素是由对应于第一维和第三维的两个坐标指定的每个字符串中沿 2d 维的最大元素的索引。
【解决方案2】:

使用ndgrid 生成沿维度 1 和 3 的值,然后使用 sub2ind 将三个索引组合成一个 linear index

[~, jj] = max(abs(mat),[],2); %// jj: returned by max
[ii, ~, kk] = ndgrid(1:size(mat,1),1,1:size(mat,3)); %// ii, kk: all combinations
result = mat(sub2ind(size(mat), ii, jj, kk));

更高级的单行替代方案:

result = max(complex(mat),[],2);

这是有效的,因为根据max documentation

对于复数输入 A,max 返回具有最大复数模(幅度)的复数,使用 max(abs(A)) 计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多