41

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

编辑:只是为了踢球:

替代文字

看起来它们在性能方面是相同的,直到你达到 100k 个元素。

4

3 回答 3

21

对于 1×N 数组,它们本质上是相同的。对于多维数组M,它们可以给出不同的结果:

  • numel(M)相当于prod(size(M))
  • length(M)相当于max(size(M))。如果M为空(即任何维度为 0),length(M)则为 0。
于 2010-06-25T16:38:58.310 回答
19

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

于 2010-06-25T16:44:37.443 回答
12

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

从代码可读性的角度来看,恕我直言,length应该在一维数组上使用。它是关于“有意编程”的,你看到代码并理解程序员在构思他的工作时的想法。所以当我看到numel我知道它用于矩阵时。

lengthvs.numel是我们团队多年来的一个讨论话题。前高级开发人员并不关心代码的可重复性,只关心正在完成的工作,并且只numel在其他可读性/格式不佳的代码中使用。另一个人是数学家,length仅用于数字数组,对他来说是“真实”数组。对于单元格数组和结构数组,他使用numel.

于 2010-06-25T16:52:18.317 回答