找到矩阵内的最大向量

时间:2014-04-10 21:27:18

标签: matlab matrix find cell-array submatrix

我试图通过MATLAB向量找到矩阵化合物中最大的向量,但是我遇到了一些困难,所以如果有人帮助我,我会非常感激。我有这个:

矩阵路径(Dijkstra函数的解),它是一个1000x1000矩阵,其值是1行和不同列数的向量(当列大于10时,值显示为" 1x11 double,1x12 double等等#34;)。矩阵路径具有以下形式:

         1                   2                           3 ....
  1      1                   <1x20 double>              <1x16 double>
  2    <1x20 double>         2                          [2,870,183,492,641,863,611,3]
  3    <1x16 double>     [3,611,863,641,492,183,870,2]   3   
  4    <1x25 double>         <1x12 double>               <1x14 double>
  .
  .
  .

起初我想通过

找到矩阵中最大的矢量
B = max(length(paths))

然而,MATLAB返回B = 1000,这是可行的,但不太可能。当试图通过使用:

找出向量的位置时
[row,column] = find(length(paths) == B)

MATLAB返回row = 1,column = 1,这肯定是错误的......我认为这可能是MATLAB如何获取数据的问题。它就像它没有将矩阵的条目视为向量,因为当我输入:

   length(paths(3,2))

它返回1,但它应该按照我的理解返回8,同样在介绍时:

    paths(3,2)

返回[1x8 double]但我希望看到整个向量。我不知道该怎么做,也许是&#34;因为&#34;循环,我真的不知道MATLAB是否将矩阵的数据作为向量或简单的双值。

1 个答案:

答案 0 :(得分:2)

使用cellfunnumel可以找到具有最大向量的单元格,以获取paths单元格中存储的每个数字矩阵中的元素数量:

vecLens = cellfun(@numel,paths);
[maxLen,im] = max(vecLens(:));
[rowMax,colMax] = ind2sub(size(vecLens),im)

这将获得包含大小的1000x1000数字矩阵vecLensmax获取最大元素的线性索引,ind2sub将其转换为行,列索引。

关于length的说明:它给出了最大尺寸的大小。 paths的大小为1000x1000,因此length(paths)为1000.我的建议是,不要使用length。使用size,指定所需的尺寸。


如果多个向量长度相同,则使用上述方法得到第一个向量。要获得所有这些(从max命令之后开始):

maxMask = vecLens==maxLen;
if nnz(maxMask)>1,
    [rowMax,colMax] = find(maxMask);
else
    [rowMax,colMax] = ind2sub(size(vecLens),im)
end

或只是

[rowMax,colMax] = find(vecLens==maxLen);