从满足给定条件的行中提取值

时间:2017-09-21 12:37:25

标签: matlab find accumarray

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

但无法得到我想要的东西。

2 个答案:

答案 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