2015-11-02 62 views
1

我試圖用預先定義的箱子來表示一個巨大的矢量,並進行1-k編碼。例如,如果我的載體是矢量分類

1.101 

3.45 

8 

9.91 

2.47 

5.5 

6.8 

和我有四個二進制位

  • 濱1:(0 - 2.5),和它的1-K編碼1 0 0 0

  • 濱2: (2.51 - 5)和它的1-K編碼0 1 0 0

  • 濱3:(5.01 - 7.5)和它的1-K編碼0 0 1 0

  • 濱4:(7.51 - 10)和它的1-K編碼0 0 0 1

我想建立其代表在下列方式矢量的新矩陣(7x4的):

1.101 --> 1 0 0 0 

3.45 --> 0 1 0 0 

8  --> 0 0 0 1 

9.91 --> 0 0 0 1 

2.47 --> 1 0 0 0 

5.5 --> 0 0 1 0 

6.8 --> 0 0 1 0 

我如何在MATLAB中做到這一點?

回答

2

我能想到的最簡單的方法是使用histcounts來做直方圖計數,但是不是獲取直方圖,而是希望找到屬於該值的實際bin。你需要第三個輸出histcounts。您還需要確保垃圾箱的邊緣從0到10,步長爲2.5。一旦你有了這個,只需創建一個sparse矩陣,其中對於非零條目,行的數量從1到最多可以與向量中的值相同,並且列直接使用histcounts的第三個輸出。完成後,您還需要將其轉換爲full

vec = [1.101; 3.45; 8; 9.91; 2.47; 5.5; 6.8]; %// Your example 

[~,~,bin] = histcounts(vec, 0:2.5:10); %// Find which bin each value belongs to 

%// Compute the matrix 
out = full(sparse((1:numel(vec)).', bin, 1)); 

我們得到:

out = 

    1  0  0  0 
    0  1  0  0 
    0  0  0  1 
    0  0  0  1 
    1  0  0  0 
    0  0  1  0 
    0  0  1  0