我知道length(x)
返回x
的最大尺寸,而numel(x)
返回x
中元素的总数,但对于一个1x n的数组,哪个更好呢?它们在这种情况下是否可以互换?
编辑:只是为了好玩:
看起来它们在性能上是相同的,直到你有100k个元素。
我知道length(x)
返回x
的最大尺寸,而numel(x)
返回x
中元素的总数,但对于一个1x n的数组,哪个更好呢?它们在这种情况下是否可以互换?
编辑:只是为了好玩:
看起来它们在性能上是相同的,直到你有100k个元素。
在这种情况下,它们返回相同的结果,没有区别。就性能而言,这取决于MATLAB中数组的内部工作方式。例如,如果有有关数组中元素数量的元信息(无论形状如何),那么numel
尽可能快,而max(size(x))
似乎需要更多工作才能获得相同的结果(检索大小,然后找到其中最大的值)。在这种情况下,我习惯使用numel
,但除了性能方面(假设说),我会说它们是可以互换的。
numel
对于 1xN 数组可读性较高(的确,我发现当可用时 numel
更富有表现力,但这是主观的)。 - ShinTakezou就像其他人所说,对于一维数组它们是相同的。
在我的观点中,从代码可读性的角度来看,应该在一维数组上使用length
。这是关于“意图编程”的问题,您可以查看代码并理解程序员在构思他的工作时想要表达的内容。因此,当我看到numel
时,我知道它用于矩阵。
length
与numel
是我们团队多年讨论的话题。以前的高级开发人员不关心代码的可读性,只关心工作是否完成,并仅在其他不易读取/格式化的代码中使用numel
。而另一个人是数学家,只在数字数组上使用length
,对于他来说这些是“真正的”数组。对于单元格数组和结构体数组,他使用numel
。
extern\include\matrix.h
中找到的mxArray
结构:http://groups.google.com/group/comp.soft-sys.matlab/browse_thread/thread/c241d8821fb90275 - Amro