在matlab中检索向量中元素数量的最佳方法
Best way to retrieve the number of elements in a vector in matlab
我想知道在 matlab 中以速度检索向量中元素数量的最佳方法是什么:
是吗:
length(A)
或
size(A,1)
都没有。为此,您希望 始终 使用 numel
。 length
只有 return 是最长的维度(对于二维数组可能会造成混淆)并且 size(data, dimension)
需要您知道它是行向量还是列向量。 numel
将 return 元素个数无论是行向量、列向量还是多维数组。
我们可以通过编写快速基准测试轻松测试它们的性能。我们将使用各种方法计算大小 N
次(为此我使用了 10000 次)。
function size_test
nRepeats = 10000;
times1 = zeros(nRepeats, 1);
times2 = zeros(nRepeats, 1);
times3 = zeros(nRepeats, 1);
for k = 1:nRepeats
data = rand(10000, 1);
tic
size(data, 1);
times1(k) = toc;
tic
length(data);
times2(k) = toc;
tic
numel(data);
times3(k) = toc;
end
% Compute the total time required for each method
fprintf('size:\t%0.8f\n', sum(times1));
fprintf('length:\t%0.8f\n', sum(times2));
fprintf('numel:\t%0.8f\n', sum(times3));
end
当 运行 在我的机器上时,它产生:
size: 0.00860400
length: 0.00626700
numel: 0.00617300
因此,除了最稳健之外,numel
也比其他替代方案稍快。
话虽这么说,除了确定数组中的元素数量之外,您的代码中可能还有许多其他瓶颈,因此我将专注于优化这些瓶颈。
我想知道在 matlab 中以速度检索向量中元素数量的最佳方法是什么:
是吗:
length(A)
或
size(A,1)
都没有。为此,您希望 始终 使用 numel
。 length
只有 return 是最长的维度(对于二维数组可能会造成混淆)并且 size(data, dimension)
需要您知道它是行向量还是列向量。 numel
将 return 元素个数无论是行向量、列向量还是多维数组。
我们可以通过编写快速基准测试轻松测试它们的性能。我们将使用各种方法计算大小 N
次(为此我使用了 10000 次)。
function size_test
nRepeats = 10000;
times1 = zeros(nRepeats, 1);
times2 = zeros(nRepeats, 1);
times3 = zeros(nRepeats, 1);
for k = 1:nRepeats
data = rand(10000, 1);
tic
size(data, 1);
times1(k) = toc;
tic
length(data);
times2(k) = toc;
tic
numel(data);
times3(k) = toc;
end
% Compute the total time required for each method
fprintf('size:\t%0.8f\n', sum(times1));
fprintf('length:\t%0.8f\n', sum(times2));
fprintf('numel:\t%0.8f\n', sum(times3));
end
当 运行 在我的机器上时,它产生:
size: 0.00860400
length: 0.00626700
numel: 0.00617300
因此,除了最稳健之外,numel
也比其他替代方案稍快。
话虽这么说,除了确定数组中的元素数量之外,您的代码中可能还有许多其他瓶颈,因此我将专注于优化这些瓶颈。