Matlab 求矩阵中的最大向量

Matlab 求矩阵中的最大向量,matlab,matrix,find,cell-array,submatrix,Matlab,Matrix,Find,Cell Array,Submatrix,我正试图用MATLAB通过向量找到矩阵化合物中的最大向量,但是我有一些困难,所以如果有人帮助我,我将非常感谢。我有这个: 矩阵路径(Dijkstra函数的解决方案),是一个1000x1000矩阵,其值是1行和不同列数的向量(当列大于10时,值显示为“1x11双精度、1x12双精度等”)。矩阵路径具有以下形式: 1 2 3 .... 1 1 &

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

矩阵路径(Dijkstra函数的解决方案),是一个1000x1000矩阵,其值是1行和不同列数的向量(当列大于10时,值显示为“1x11双精度、1x12双精度等”)。矩阵路径具有以下形式:

         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>
  .
  .
  .
但是,MATLAB返回B=1000,该值是可行的,但不太可能。当尝试使用以下方法查找向量的位置时:

[row,column] = find(length(paths) == B)
MATLAB返回行=1,列=1,这肯定是错误的。。。我认为这可能是一个MATLAB如何获取数据的问题。这就像它不考虑矩阵的条目作为向量,因为当我进入:

   length(paths(3,2))
它返回1,但据我所知,它应该返回8,在介绍以下内容时也是如此:

    paths(3,2)

它返回
[1x8 double]
,但我希望看到整个向量。我不知道该怎么办,可能是一个“for”循环,我真的不知道MATLAB是将矩阵的数据作为向量还是简单的双值。

可以使用
cellfun
numel
找到向量最大的单元格,以获得存储在
路径的单元格中的每个数字矩阵中的元素数

vecLens = cellfun(@numel,paths);
[maxLen,im] = max(vecLens(:));
[rowMax,colMax] = ind2sub(size(vecLens),im)
这将获取一个1000x1000数值矩阵
vecLens
,其中包含大小,
max
获取最大元素的线性索引,
ind2sub
将其转换为行、列索引

关于
长度的注释
:它给出了最大尺寸的大小。
路径的大小为1000x1000,因此
长度(路径)
为1000。我的建议是,永远不要使用
length
。使用
尺寸
,指定所需的尺寸


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

或者只是

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

当您运行
类(路径)
时会得到什么?单元格,因此,它是一个单元格矩阵。。我还要解释一下,
numel
函数给出了矩阵的元素数。当您使用
cellfun
调用它时,它将为
路径
单元格数组中的每个矩阵调用
numel
。结果将是一个1000x1000矩阵,其中
vecLens(r,c)
包含
路径(r,c)
@RafaelMonteiro处的路径长度,感谢您的建议。更新。谢谢你们,你们的回答非常有用:关于
长度的好建议+1@user2822577还请注意,如果有多个单元具有相同的最大长度,则第一个解决方案仅给出第一个实例。要获得所有信息,请参阅我的答案中添加的解决方案。
maxMask = vecLens==maxLen;
if nnz(maxMask)>1,
    [rowMax,colMax] = find(maxMask);
else
    [rowMax,colMax] = ind2sub(size(vecLens),im)
end
[rowMax,colMax] = find(vecLens==maxLen);