【发布时间】:2011-03-08 09:04:37
【问题描述】:
我知道 length(x) 返回 max(size(x)) 和 numel(x) 返回 x 的元素总数,但是对于 1 x n 数组,哪个更好?这是否重要,或者在这种情况下它们可以互换?
编辑:只是为了好玩:
在达到 100k 个元素之前,它们的性能似乎相同。
【问题讨论】:
标签: arrays matlab microbenchmark
我知道 length(x) 返回 max(size(x)) 和 numel(x) 返回 x 的元素总数,但是对于 1 x n 数组,哪个更好?这是否重要,或者在这种情况下它们可以互换?
编辑:只是为了好玩:
在达到 100k 个元素之前,它们的性能似乎相同。
【问题讨论】:
标签: arrays matlab microbenchmark
在这种情况下,它们返回相同并且没有区别。在性能方面,它取决于 MATLAB 中数组的内部工作。例如。如果有关于数组中有多少元素的元信息(无论形状如何),那么 numel 尽可能快,而 max(size(x)) 似乎需要更多的工作才能获得相同的东西(检索大小和然后找到其中的最大值)。在那种情况下我习惯使用numel,但除了表演演讲(假设),我会说它们是可以互换的。
【讨论】:
numel 可读为 length(实际上我发现 numel 在可用时更具表现力,但它是主观的)
正如其他人所说,它们对于一维数组是相同的。
恕我直言,从代码可读性的角度来看length 应该用于一维数组。这是关于"intentional programming",你看到代码并理解程序员在构思他的工作时的想法。所以当我看到numel 时,我就知道它是用在矩阵上的。
length 与 numel 是我们团队多年来的讨论话题。前高级开发人员不关心代码的可重复性,只关心正在完成的工作,并且只在 numel 中使用,否则代码可读性/格式不佳。另一个人是数学家,仅在数字数组上使用length,对他来说是“真实”数组。对于元胞数组和结构体数组,他使用numel。
【讨论】:
extern\include\matrix.h 中的mxArray 结构:groups.google.com/group/comp.soft-sys.matlab/browse_thread/…