Matlab 向量分类
我试图用预定义的容器表示一个巨大的向量,并进行1-k编码。例如,如果我的向量是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.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
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