Creating an m by n matrix of 0s and 1s from m-sized vector of column indexes

独自空忆成欢 提交于 2019-12-01 17:18:32

Of course, that's why they invented sparse matrices:

>> M = sparse(1:length(v),v,ones(length(v),1))
M =

   (2,1)        1
   (3,2)        1
   (1,4)        1

which you can convert to a full matrix if you want with full:

>> full(M)
ans =

     0     0     0     1
     1     0     0     0
     0     1     0     0

Or without sparse matrix:

>> M = zeros(max(v),length(v));
>> M(v'+[0:size(M,2)-1]*size(M,1)) = 1;
>> M = M'

M =

 0     0     0     1
 1     0     0     0
 0     1     0     0

Transposition is used because in matlab arrays are addressed by columns

In Octave, at least as of 3.6.3, you can do this easily using broadcasting:

M = v==1:4
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!