2012-07-11 51 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

相關問題