Matrix 有效地将向量解压为二进制矩阵倍频程
在八度音阶上,我尝试以以下格式解压向量:Matrix 有效地将向量解压为二进制矩阵倍频程,matrix,vector,binary,octave,Matrix,Vector,Binary,Octave,在八度音阶上,我尝试以以下格式解压向量: y = [ 1 2 4 1 3 ] 我想返回一个维度矩阵(行(y)x最大值(y)),其中,对于每一行,我在原始数字值的列中有一个1,在其他地方有一个0,即上面的示例 y01 = [ 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 ] 到目前为止我有 y01 = zeros( m, num_lab
y = [ 1
2
4
1
3 ]
我想返回一个维度矩阵(行(y)x最大值(y)),其中,对于每一行,我在原始数字值的列中有一个1,在其他地方有一个0,即上面的示例
y01 = [ 1 0 0 0
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0 ]
到目前为止我有
y01 = zeros( m, num_labels );
for i = 1:m
for j = 1:num_labels
y01(i,j) = (y(i) == j);
end
end
这是可行的,但对于更大的矩阵来说速度会变慢,而且似乎效率很低,因为它在每一个值之间循环,即使大多数值没有改变
我在上为R找到了这个:
f3使用稀疏矩阵(这也节省了大量内存),可以像往常一样用于进一步的计算:
y = [1; 2; 4; 1; 3]
y01 = sparse (1:rows (y), y, 1)
如果你真的想要一个完整的矩阵,那么使用“full”:
当矩阵较大时,稀疏是一种更有效的方法。
如果结果的维度不是很高,可以尝试以下方法:
y = [1; 2; 4; 1; 3]
I = eye(max(y));
y01 = I(y,:)
结果与full(稀疏(…)相同)
另一种可能性是:
y = [1; 2; 4; 1; 3]
classes = unique(y)(:)
num_labels = length(classes)
y01=[1:num_labels] == y
具有以下详细打印输出:
y =
1
2
4
1
3
classes =
1
2
3
4
num_labels = 4
y01 =
1 0 0 0
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
y01 =
1 0 0 0
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
y = [1; 2; 4; 1; 3]
classes = unique(y)(:)
num_labels = length(classes)
y01=[1:num_labels] == y
y =
1
2
4
1
3
classes =
1
2
3
4
num_labels = 4
y01 =
1 0 0 0
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
% Vector y to Matrix Y
Y = zeros(m, num_labels);
% Loop through each row
for i = 1:m
% Use the value of y as an index; set the value matching index to 1
Y(i,y(i)) = 1;
end