Matlab定义要返回的矩阵函数length
最大阵列尺寸的长度
使用了解最大尺寸的例子是什么?知道行数或列数有明显的用途......但我不知道为什么有人会想要最大的维度,无论是行还是列。
谢谢
答案 0 :(得分:3)
事实上,我的大部分代码都想为每一行,每列或每个元素做一次。
因此,我通常使用其中一个
size(M,1)
size(M,2)
numel(V)
特别是不依赖于长度来匹配向量中的元素数量!
我在{matlab的旧版本}中找到的唯一真正的便利是,如果我需要repeat
语句而不是while
。然后方便的是,向量的长度通常至少返回一个。
我对length
的一些其他用途:
答案 1 :(得分:2)
这个问题解决了一个好点,我看到程序失败是因为在矩阵上应用了长度命令(用于循环)。特别是当人们希望得到size(M, n)
因为n-th
维度应该是最大的。总的来说,我看不到允许长度应用于矩阵的优势,事实上我只看到可能意外行为的风险。
如果我想知道任何矩阵的最大维度,我宁愿更明确地使用max(size(M))
,对于阅读此代码的人来说,这也应该更加清晰。
我不确定,以下示例是否应该在此答案中,但它以某种方式解决了同一点。
在对矩阵求平均值时,使用维度进行显式化也很有用。考虑这种情况,您总是希望在第一维上平均,即在矩阵的列上。只要您的矩阵大小为n x m
,其中n
大于1
,您就不必关心指定维度了。但是对于不可预见的情况,你的矩阵恰好是一个行向量,事情会变得混乱:
%// good case, where num of rows is 2 or greater
size(mean(rand(2, 4), 1)) %// [1, 4]
size(mean(rand(2, 4))) %// [1, 4]
%// bad case, where num of rows is 1
size(mean(rand(1, 4), 1)) %// [1, 4]
size(mean(rand(1, 4))) %// [1, 1], returns the average of that row
答案 2 :(得分:1)
如果要创建一个可以包含非方形输入矩阵B
的方阵A
,可以使用后者的长度并使用它来初始化矩阵{{1} } B
,其中行和列的位置为zeros
的{{1}},然后将输入矩阵复制到新的归零矩阵中。
答案 3 :(得分:1)
另一个例子 - 我最常使用的例子 - 是使用向量时。使用length
代替size(vec,1)
或size(vec,2)
非常方便,因为如果它是行或列向量并不重要。
正如@Dennis Jaheruddin所指出的,length
在某些版本的MATLAB中为空向量提供了错误的结果。因此,使用numel
代替length
可能会方便更好的向后兼容性。代码的可读性几乎与恕我直言。
This question比较了length
和numel
及其效果,结果表明它们在向量中的表现类似于100k元素。凭借超过100k的元素,numel
似乎更快。我试图验证这一点(使用MATLAB R2014a)并得出以下结果:
在这里,length
有点慢,但由于它在微秒范围内,我猜它不会成为真正的速度差异。