我想每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 );
但无法得到我想要的东西。
答案 0 :(得分:0)
您应该使用逻辑索引来获取30分钟范围内的价格:
data(0 < data(:,2) & data(:,2) < 31, 3)
为什么发现不符合预期?
find
适用于以下表达式0 < data(:,2) & data(:,2) < 31
的结果,即[1 1 1 1].'
它对原始矩阵data
一无所知。因此,在这种情况下,第二和第三个参数是无用的。它们对于获得nonzero elements in a matrix很有用。
作为逻辑索引的(效率较低)替代方法,您可以获得与以下相同的结果:
data(find(0 < data(:,2) & data(:,2) < 31 ), 3)
选择特定小时
目前,您选择每小时前半部分的价格。要选择00:00到00:30之间的价格,您可以使用以下内容:
data(data(:,1) == 0 && 0 < data(:,2) & data(:,2) < 31, 3)
答案 1 :(得分: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