Matlab 向量分类

Matlab 向量分类,matlab,vector,Matlab,Vector,我试图用预定义的容器表示一个巨大的向量,并进行1-k编码。例如,如果我的向量是 1.101 3.45 8 9.91 2.47 5.5 6.8 我有四个箱子 Bin 1:(0-2.5)及其1-k编码100 Bin 2:(2.51-5)及其1-k编码0110 BIN3:(5.01-7.5)及其1-k编码0110 Bin 4:(7.51-10)及其1-k编码01 我想构建一个新的矩阵(7x4),它以以下方式表示向量: 1.101 --> 1 0 0 0 3.45 -->

我试图用预定义的容器表示一个巨大的向量,并进行1-k编码。例如,如果我的向量是

1.101

3.45

8

9.91

2.47

5.5

6.8
我有四个箱子

  • Bin 1:(0-2.5)及其1-k编码
    100

  • Bin 2:(2.51-5)及其1-k编码
    0110

  • BIN3:(5.01-7.5)及其1-k编码
    0110

  • Bin 4:(7.51-10)及其1-k编码
    01

我想构建一个新的矩阵(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中实现这一点?

我能想到的最简单的方法是使用进行直方图计数,但不是获取直方图,而是查找实际的bin值所属。为此,您需要第三次输出
histcounts
。在2.5的步骤中,您还需要确保箱子边缘在0到10之间变化。一旦有了这个,只需创建一个
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