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

Dor*_*oom 39 arrays matlab microbenchmark

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

编辑:只是为了踢:

替代文字

看起来它们在性能方面是相同的,直到你获得100k元素.

gno*_*ice 19

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

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

  • 注意,如果x = 1(0,n); 然后max(size(x)) - > n而length(x) - > 0 (4认同)

Shi*_*zou 18

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

  • LENGTH永远不会成为您计划中的性能瓶颈!只有真正的性能改进很重要 对于所有其他情况,代码可读性很重要. (7认同)
  • 你在表演部分是正确的.我刚刚在x = 1:100000000上运行了100次的数字与长度的迭代,并且数字平均快了3.0919倍.对于较小的阵列而言,这应该不重要. (4认同)

Mik*_*ail 10

正如其他人所说,它们对于一维阵列是相同的.

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

lengthnumel我们团队多年来的讨论主题相比.前高级开发人员并不关心代码的可靠性,只关注正在完成的工作,并且只numel在其他不易读/格式化的代码中使用.其他人是一个matematician,length只用于数字数组是他的"真正的"数组.对于他使用的单元阵列和结构数组numel.

  • 当我看到NUMEL使用时,我不认为它是在矩阵与矢量上使用的,我只是假设它被用在尺寸不重要的对象上,只有元素的*数量*很重要. (7认同)
  • 我认为它是*变量名*应指示对象是向量还是矩阵,而不是是否使用了NUMEL或LENGTH. (5认同)
  • 良好的视角 - 在一分钟内提高可读性/在性能上无显着提高.+1 (2认同)
  • 我能说什么,我是懒惰的;)所有开玩笑的一面,即使微优化通常不值得,我相信@ShinTakezou有一个有效的观点,即MATLAB的矩阵内部结构可能存储元素的数量为元 - 信息; 我遇到了一个有趣但旧的新闻组帖子,该帖子研究了`extern\include\matrix.h`中的`mxArray`结构:http://groups.google.com/group/comp.soft-sys.matlab/browse_thread/线程/ c241d8821fb90275 (2认同)