1

我正在尝试使一些代码更高效,并且想知道如何对其进行矢量化:

%==========================================================================
% MinutesInDayTable.m
% 
% Creates a table identifying every minute as an integer from 0 to 2400.

minuteTableInDay=zeros(24*60,1);
k=1;
for i=1:24
    for j=1:60
        minuteTableInDay(k) = ((i-1)*100+(j-1))*100;
        k=k+1;
    end
end
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ end of code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4

3 回答 3

5

这是另一个:

minuteTableInDay = (datestr(0:1/24/60:1, 'HHMMSS')-48) * 10.^(5:-1:0)'

玩得开心 :)

于 2013-06-13T16:07:54.103 回答
4

这很简单,向量化这个计算的一般方法是:

[I, J] = meshgrid(1:24, 1:60);                      %// 2-D arrays for I and J
minuteTableInDay = ((I - 1) * 100 + (J - 1)) * 100; %// Compute all values at once
minuteTableInDay = minuteTableInDay(:);             %// Convert to a column vector

向量化的关键是向 MATLAB 提供所有值,以便可以一次对所有元素执行操作。

在您的情况下,您的代码包含基本的算术函数,因此您可以进一步减少代码(类似于 Oleg 的建议):

minuteTableInDay = bsxfun(@plus, (0:59)', (0:23) * 100) * 100;
于 2013-06-13T15:36:52.097 回答
3

您可以创建时间0,...,115900,120000,...,235900

out = bsxfun(@plus, (0:59)' , 0:23)*100;
out = out(:);

如果您希望它是100,...,115900,120000,...,240000,请添加以下行:

out = [out(2:end); 240000]
于 2013-06-13T15:36:28.537 回答