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

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 に答える