创建矩阵:前n行,第1列有1,所有其他列为0,下n行,第2列有1,所有其他列为0等等

时间:2015-06-30 07:57:23

标签: matlab matrix

我想生成一个矩阵,在前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))。还有其他方法吗?

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功能

比较速度