有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