我有一个长度为n的向量y.y(i)是1..m的整数.是否有更简单的方法将y转换为nxm逻辑矩阵yy,其中yy(i,j)= 1如果y(i)= j,否则为0?这就是我一直在做的事情:
% If m is known (m = 3 here), you could write it out all at once
yy = [y == 1; y== 2; y == 3];
yy = reshape(yy, n, 3);
Run Code Online (Sandbox Code Playgroud)
要么
% if m is not known ahead of time
yy = [ y == 1 ];
for i = 2:m;
yy = [ yy; y == i ];
end
yy = reshape(yy, n, m);
Run Code Online (Sandbox Code Playgroud)
Jon*_*nas 12
您可以使用bsxfun此
yy = bsxfun(@eq,y(:),[1,2,3])
Run Code Online (Sandbox Code Playgroud)
y
被转换(如果需要)到列向量,而另一个向量是行向量.bsxfun
隐式扩展m-by-1和1-by-n数组,使结果变为m-by-n.
如果n*m足够大(并且m本身足够大),则最好创建yy
一个稀疏矩阵.您的y
向量实际上是一种特殊类型的稀疏矩阵格式,但我们可以通过执行以下操作将其转换为内置稀疏矩阵格式.
yy = sparse(1:length(y), y, 1);
Run Code Online (Sandbox Code Playgroud)
这将使您的存储空间保持为O(n).如果您使用yy
大量索引,那么它不会给您带来很多好处.如果是这种情况,最好使用原始的稀疏结构(即y
).
归档时间: |
|
查看次数: |
3356 次 |
最近记录: |