Arrays Matlab中以下循环的矢量化版本

Arrays Matlab中以下循环的矢量化版本,arrays,matlab,vectorization,Arrays,Matlab,Vectorization,我需要做的是,给定一个标签向量(数字1到k),构造一个矩阵Y,这样每列都是一个布尔向量,表示Y中的每个标签是否与该列的索引匹配 例如,如果labels=[1 2 3 4]那么Y将是: [ [ 1 0 0 0] [ 0 1 0 0] [ 0 0 1 0] [ 0 0 0 1] ] 到目前为止,我的代码是: num_classes = 10; num_samples = 100; labels = randi(num_classes, [num_samples

我需要做的是,给定一个标签向量(数字1到k),构造一个矩阵
Y
,这样每列都是一个布尔向量,表示
Y
中的每个标签是否与该列的索引匹配

例如,如果
labels=[1 2 3 4]
那么
Y
将是:

[ [ 1  0  0  0]
  [ 0  1  0  0]
  [ 0  0  1  0]
  [ 0  0  0  1] ]
到目前为止,我的代码是:

num_classes = 10;
num_samples = 100;

labels = randi(num_classes, [num_samples, 1]);   % Example
Y = zeros([num_samples, num_classes]);

for k = 1:num_classes
    Y(:, k) = (y == k);
end

这种方法可以工作,但当
num\u类
num\u样本
非常大时,速度可能会非常慢。有没有办法将其矢量化?

如果您有神经网络工具箱,您可以使用:

您可以使用

或者,如果你有2016b(或八度),你可以使用隐式广播

Y = labels == 1:num_classes

这是另一种方法。让我们定义一些示例数据:

num_classes = 5;
num_samples = 10;
labels = [3 5 3 5 3 2 4 4 4 2];
然后

给出了期望的结果

Y =
     0     0     1     0     0
     0     0     0     0     1
     0     0     1     0     0
     0     0     0     0     1
     0     0     1     0     0
     0     1     0     0     0
     0     0     0     1     0
     0     0     0     1     0
     0     0     0     1     0
     0     1     0     0     0

您使用的是什么版本的MATLAB?MATLAB版本2015a
num_classes = 5;
num_samples = 10;
labels = [3 5 3 5 3 2 4 4 4 2];
Y = full(sparse(1:num_samples, labels, 1, num_samples, num_classes));
Y =
     0     0     1     0     0
     0     0     0     0     1
     0     0     1     0     0
     0     0     0     0     1
     0     0     1     0     0
     0     1     0     0     0
     0     0     0     1     0
     0     0     0     1     0
     0     0     0     1     0
     0     1     0     0     0