2012-07-11 39 views
1

有100个数据点(比如说)的时间序列。我希望为每个唯一数据点分配0 1 2的符号。问题是我已经尝试过,但是因为无论我指定符号,程序只是出现了1和0的概率。以下是这个问题时间序列的采样和数字化

  1. 声明

S = X(:,1)> 0.5;

输出二进制结果0,1。那么,如何创建多个分区/离散化,以便除了可以分配0,1个其他数字之外。

是否有任何其他方式来象征和分区?

+0

查看'histc'函数。 – 2013-07-16 01:55:12

回答

2

最明显的方法,这样做会是这样的:

s=zeroes(size(x,1), 1); 
s(x>=BP(1) & x<BP(2)) = 1; 
s(x>=BP(2)) = 2; 
etc. 

,其中BP是你的破发点列表(即分区的边缘)。这将使BP(1)= 0以下,BP(1)和BP(2)= 1以及BP(2)以上的条目=

我想象这样的事情应该工作过:

s = zeroes(size(x,1), 1]; 
for ii=1:length(BP) 
    idx = x > BP(ii); 
    s(idx) = s(idx) + 1; 
end 

你有更多的选择,如果有您的数据和/或容器大小一定的制约。您可能会考虑乘法,除法和舍入/截断的巧妙组合。例如,假设您的数据全部在[0,1)范围内,并且您希望将其分成二十个均匀分布的箱。然后,你可以这样做:

s = floor(x(:,1) .* 20); 

这将使。就拿0和19之间的值,如果你的数据是不是已经在该区间,你可以明显地先重新调整它:

data = x(:,1); 
data = data - min(data); 
data = data ./ (max(data) + eps(max(data))); 
s = floor(data .* 20); 

请注意,这里,第3行中的归一化因子不是最大(数据),而是matlab可以表示的第二大数。我们这样做,以便有20个组而不是21个。

+0

谢谢您的回复。我无法理解断点的含义。它们是根据我的数据集(BP(1)= 0.5,BP(2)= 1.5等)协调或任意数字。 – Chaitali 2012-07-12 01:21:29

+0

此外,我完全没有遵循x,y的概念。您是否可以详细阐述这一点,它的含义以及如何确定BP。 – Chaitali 2012-07-12 01:35:29

+0

通过断点,我的意思是你的分区的边缘;他们可以是你选择的任何数字。对于第二个例子,我应该在你的文章中坚持约定。我会尝试编辑它以使其更清晰。让我知道这是否有帮助。 – 2012-07-12 04:00:37

1

x(:,1) > 0.5;是创建一个逻辑索引的语句:true (1)当条件满足时,false (0)它不是。您可以使用此逻辑索引从满足条件的原始向量中获取值。

logical_index = x(:,1) > 0.5; 
s = x(logical_index,1); %# select the subset of the matrix given by x > 0.5 

s现在包含从x的值是大于0.5。

除此之外,我不明白你想要做什么。一个小的示例数据集将有所帮助(如果您仍然需要帮助,那就是)。

编辑:要找到适合您的设置的值,请​​参阅prctile。然后,您可以应用答案中的任何方法来确定哪些元素属于哪个类别。

+0

感谢您的及时回复。正如答案中提到的那样,我打算在数据中创建部分,其范围是0.5-1范围内的10个点(因此落入此范围的数据点将用符号1表示);另一个在1-1.5中有10个字体(用符号2表示),所以一个。因此,在没有查看数据点的情况下,是否可以描述分区,以便它们对所有情况都有效? – Chaitali 2012-07-12 02:16:12