0

我想每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 );

但无法得到我想要的。

4

2 回答 2

0

我找到了解决方案

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
于 2017-09-21T15:49:33.133 回答
0

您应该使用逻辑索引来获取 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)
于 2017-09-21T12:44:14.887 回答