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