有100个数据点(比如说)的时间序列。我希望为每个唯一数据点分配0 1 2的符号。问题是我已经尝试过,但是因为无论我指定符号,程序只是出现了1和0的概率。以下是这个问题时间序列的采样和数字化
- 声明
S = X(:,1)> 0.5;
输出二进制结果0,1。那么,如何创建多个分区/离散化,以便除了可以分配0,1个其他数字之外。
是否有任何其他方式来象征和分区?
有100个数据点(比如说)的时间序列。我希望为每个唯一数据点分配0 1 2的符号。问题是我已经尝试过,但是因为无论我指定符号,程序只是出现了1和0的概率。以下是这个问题时间序列的采样和数字化
S = X(:,1)> 0.5;
输出二进制结果0,1。那么,如何创建多个分区/离散化,以便除了可以分配0,1个其他数字之外。
是否有任何其他方式来象征和分区?
最明显的方法,这样做会是这样的:
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个。
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.5-1范围内的10个点(因此落入此范围的数据点将用符号1表示);另一个在1-1.5中有10个字体(用符号2表示),所以一个。因此,在没有查看数据点的情况下,是否可以描述分区,以便它们对所有情况都有效? – Chaitali 2012-07-12 02:16:12
查看'histc'函数。 – 2013-07-16 01:55:12