我想生成一个矩阵,在前n行中,第一列有1,所有其他列都有0。在接下来的n行中,第二列具有1,而所有其他列具有0,依此类推。例如,当n = 2且列数为3时,矩阵将如下所示
A =
1 0 0
1 0 0
0 1 0
0 1 0
0 0 1
0 0 1
如果m是我使用的列数kron(eye(m),ones(n,1))
。还有其他方法吗?
答案 0 :(得分:3)
我不知道“更好”意味着什么,但这里有kron(eye(m),ones(n,1))
的替代方案:
reshape(repmat(permute(eye(m),[3,2,1]),n,1),[],m)
或
reshape(bsxfun(@times,ones(n,1),permute(eye(m),[3,2,1])),[],m)
或
reshape(meshgrid(eye(m),ones(n,1)),[],m)
或
I = eye(m);
I(ceil((1:m*n)./n),:)
或
N = n*m;
z = zeros(N,m);
z(sub2ind([N,m],1:N,ceil((1:N)./n))) = 1
或
C = mat2cell(ones(n,m),n,ones(1,m));
blkdiag(C{:})
您可以使用timeit
功能