Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB与x27之间的差异;s numel函数和长度函数_Arrays_Matlab_Microbenchmark - Fatal编程技术网

Arrays MATLAB与x27之间的差异;s numel函数和长度函数

Arrays MATLAB与x27之间的差异;s numel函数和长度函数,arrays,matlab,microbenchmark,Arrays,Matlab,Microbenchmark,我知道length(x)返回max(size(x))和numel(x)返回x的元素总数,但是对于一个1×n的数组,哪个更好?这有关系吗,或者在这种情况下它们是可互换的 编辑:仅用于踢腿: 在达到100k个元素之前,它们的性能看起来是相同的。对于1×N阵列,它们基本上是相同的。对于多维数组M,它们可以给出不同的结果: 相当于prod(尺寸(M)) 相当于max(尺寸(M))。如果M为空(即任何维度为0),则length(M)为0 在这种情况下,它们返回的是相同的,没有区别。在性能方面,它取决于

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

编辑:仅用于踢腿:


在达到100k个元素之前,它们的性能看起来是相同的。

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

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

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

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

从代码可读性角度看,IMHO应在一维数组上使用。它是关于,你看代码,理解程序员在构思他的作品时的想法。因此,当我看到
numel
时,我知道它用于矩阵


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

您在性能方面是对的。我刚刚在x=1:100000000上运行了100次numel vs length的迭代,numel平均快了3.0919倍。不过,对于较小的数组来说,这应该没什么大不了的……现在我真的很好奇numel/length的性能与数组大小的关系。在您的程序中,长度永远不会是性能瓶颈!只有真正的性能改进才重要。对于所有其他情况,代码可读性都很重要。第一个优化是编写一个更好的算法,但避免无用的操作有助于提高速度;当然,没有理由优化执行一次的任何代码。(多亏了多丽索姆的测试,我对事情的发展做出了一个简单的预测)。我发现1xN数组的
numel
可读性与
length
一样好(事实上,我发现
numel
在可用时更具表现力,但这是主观的)良好的透视图-在一分钟内提高了可读性/性能没有显著提高+1当我看到使用NUMEL时,我并不认为它是在矩阵上使用的,而不是在向量上使用的,我只是假设它是在一个维度不重要的对象上使用的,只是元素的数量很重要。当你要重构代码时,重要的是,你一眼就不知道它是向量还是矩阵!我认为应该是变量名指示对象是向量还是矩阵,而不是是否使用NUMEL或LENGTH除了开玩笑,尽管微观优化通常不值得,但我相信@ShinTakezou有一个有效的观点,即MATLAB的矩阵内部结构可能将元素数量存储为元信息;我遇到了一篇有趣但古老的新闻组文章,它研究了
extern\include\matrix.h
中的
mxArray
结构:注意如果x=one(0,n);然后max(size(x))-->n,而length(x)-->0