Arrays Matlab中以下循环的矢量化版本
我需要做的是,给定一个标签向量(数字1到k),构造一个矩阵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
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