MATLAB的数字和长度函数之间的差异

时间:2010-06-25 16:33:13

标签: arrays matlab microbenchmark

我知道length(x)返回max(size(x))numel(x)返回x的元素总数,但对于1 x n数组哪个更好?它是否重要,或者在这种情况下它们是否可以互换?

编辑:只是为了踢:

alt text

在你获得100k元素之前,看起来它们的性能是相同的。

3 个答案:

答案 0 :(得分:19)

对于1-by-N阵列,它们基本相同。对于多维数组M,它们可以给出不同的结果:

  • numel(M)相当于prod(size(M))
  • length(M)相当于max(size(M))。如果M为空(即任何维度为0),则length(M)为0。

答案 1 :(得分:18)

在这种情况下,他们返回相同的,没有区别。在性能方面,它取决于MATLAB中数组的内部工作。例如。如果有关于数组中有多少元素的元信息(无论形状如何),那么numel尽可能快,而max(size(x))似乎需要更多的工作来获得相同的东西(检索大小,和然后找到那些中的最大值)。我习惯在这种情况下使用numel,但表演演讲(假设)除外,我想说它们是可以互换的。

答案 2 :(得分:9)

正如其他人所说,对于一维数组它们是相同的。

来自代码可读性观点length的恕我直言应该用于一维数组。它大概是"intentional programming",您可以看到代码,并了解程序员在构思他的工作时的想法。所以当我看到numel时,我知道它用在矩阵上。

多年来,

lengthnumel是我们团队的讨论话题。前高级开发人员并不关心代码的可靠性,只关注正在完成的工作,并且只使用numel来处理不可读/格式化的代码。其他人是一个matematician并且只在数字数组上使用length为他的“真实”数组。对于单元格数组和结构数组,他使用了numel