我想每30分钟计算一次商店的总收入,
我有一个像这样的数据集:
hour minute price
0 1 12,5
0 1 10
0 2 15
0 3 15
我试图像这样实现总计:
[rows,cols,vals] = find(0 < data(:,2) & data(:,2) < 31 );
但无法得到我想要的。
我想每30分钟计算一次商店的总收入,
我有一个像这样的数据集:
hour minute price
0 1 12,5
0 1 10
0 2 15
0 3 15
我试图像这样实现总计:
[rows,cols,vals] = find(0 < data(:,2) & data(:,2) < 31 );
但无法得到我想要的。
我找到了解决方案
data(:,2) =((data(:,2) ./ 30) + 1);
data(:,2)= floor(data(:,2));
changes = find(diff(data(:,2)))+1;
for i=1:1:(length(changes) -1)
A(i)=sum(data(changes(i):changes(i+1),3))
end
您应该使用逻辑索引来获取 30 分钟范围内的价格:
data(0 < data(:,2) & data(:,2) < 31, 3)
为什么 find 不符合您的预期?
find
对以下表达式的结果起作用0 < data(:,2) & data(:,2) < 31
,即[1 1 1 1].'
它对原始矩阵一无所知data
。因此,在这种情况下,第二个和第三个参数是没有用的。它们对于获取矩阵中的非零元素很有用。
作为逻辑索引的(效率较低的)替代方案,您可以获得相同的结果,如下所示:
data(find(0 < data(:,2) & data(:,2) < 31 ), 3)
选择特定时间
目前,您选择每小时前半段的价格。例如,要选择 00:00 到 00:30 之间的价格,您可以使用以下命令:
data(data(:,1) == 0 && 0 < data(:,2) & data(:,2) < 31, 3)