2015-11-02 4 views
1

Я пытаюсь представить огромный вектор с точки зрения предопределенных бункеров и сделать кодировку 1 k. Например, если мой векторВекторная категория

1.101 

3.45 

8 

9.91 

2.47 

5.5 

6.8 

и у меня есть четыре бункера

  • бен 1: (0 - 2,5), а его 1-к, кодирующий 1 0 0 0

  • бен 2: (2.51 - 5) и его 1-к, кодирующий 0 1 0 0

  • бен 3: (5,01 - 7,5) и его 1-к, кодирующий 0 0 1 0

  • бен 4: (7,51 - 10) и его 1-к, кодирующий 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 сделать подсчет гистограмм, но вместо того, чтобы гистограмма, вы хотите, чтобы найти фактическое бен значение принадлежало. Для этого вам нужен третий вывод 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 
Смежные вопросы