矩阵长度的目的

时间:2014-12-30 03:41:59

标签: matlab matrix

Matlab定义要返回的矩阵函数length

  

最大阵列尺寸的长度

使用了解最大尺寸的例子是什么?知道行数或列数有明显的用途......但我不知道为什么有人会想要最大的维度,无论是行还是列。

谢谢

4 个答案:

答案 0 :(得分:3)

事实上,我的大部分代码都想为每一行,每列或每个元素做一次。

因此,我通常使用其中一个

size(M,1)
size(M,2)
numel(V)

特别是不依赖于长度来匹配向量中的元素数量

我在{matlab的旧版本}中找到的唯一真正的便利是,如果我需要repeat语句而不是while。然后方便的是,向量的长度通常至少返回一个。

我对length的一些其他用途:

  • 快速粗略检查是否有什么东西。
  • 按照@Mike
  • 的说法制作方格

答案 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比较了lengthnumel及其效果,结果表明它们在向量中的表现类似于100k元素。凭借超过100k的元素,numel似乎更快。我试图验证这一点(使用MATLAB R2014a)并得出以下结果:

enter image description here

在这里,length有点慢,但由于它在微秒范围内,我猜它不会成为真正的速度差异。