有 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)以上的条目= 2;
我想这样的事情也应该起作用:
s = zeroes(size(x,1), 1];
for ii=1:length(BP)
idx = x > BP(ii);
s(idx) = s(idx) + 1;
end
如果您的数据和/或 bin 大小有一些限制,您有更多选择。您可能会考虑乘法、除法和舍入/截断的巧妙组合。例如,假设您的数据都在 [0, 1) 范围内,并且您希望将其分成 20 个均匀间隔的 bin。然后,您可以执行以下操作:
s = floor(x(:,1) .* 20);
这将使 s 取 0 到 19 之间的值。如果您的数据尚未在该区间内,您显然可以先重新调整它:
data = x(:,1);
data = data - min(data);
data = data ./ (max(data) + eps(max(data)));
s = floor(data .* 20);
请注意,这里第 3 行中的归一化因子不是 max(data),而是 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。然后,您可以应用答案中的任何方法来确定哪些元素属于哪个类别。