我想建立一個矩陣,其中我們不僅有一個「」在每一行中,而且在一個隨機位置中的每一行的非零元素。例如生成一次只能有一個矩陣
我想矩陣的大小尺寸m by n
的。這個任務看起來很簡單,但我不確定什麼是乾淨利落的做法。謝謝。
我想建立一個矩陣,其中我們不僅有一個「」在每一行中,而且在一個隨機位置中的每一行的非零元素。例如生成一次只能有一個矩陣
我想矩陣的大小尺寸m by n
的。這個任務看起來很簡單,但我不確定什麼是乾淨利落的做法。謝謝。
我建議以下方法:
N = 3; M = 6; %defines input size
mat = zeros(M,N); %generates empty matrix of NxN
randCols = randi([1,N],[M,1]); %choose columns randomally
mat(sub2ind([M,N],[1:M]',randCols)) = 1; %update matrix
結果
mat =
0 0 1
1 0 0
0 0 1
0 0 1
0 1 0
0 1 0
這將得到1的數量放在每列,因爲它只有1,我們被授予轉置後,新的矩陣將在每一行中只有一個1。
參數是生成矩陣中的行數和列數。
function [M] = getMat(n,d)
M = zeros(d,n);
sz = size(M);
nnzs = 1;
inds = [];
for i=1:n
ind = randperm(d,nnzs);
inds = [inds ind.'];
end
points = (1:n);
nnzInds = [];
for i=1:nnzs
nnzInd = sub2ind(sz, inds(i,:), points);
nnzInds = [nnzInds ; nnzInd];
end
M(nnzInds) = 1;
M = M.';
end
例子:
getMat(5, 3)
ans =
0 0 1
1 0 0
0 1 0
1 0 0
0 0 1
考慮使用此方法:
% generate a random integer matrix of size m by n
m = randi(5,[5 3]);
% find the indices with the maximum number in a row
[Y,I] = max(m, [], 2);
% create a zero matrix of size m by n
B = zeros(size(m));
% get the max indices per row and assign 1
B(sub2ind(size(m), 1:length(I), I')) = 1;
結果:
B =
0 1 0
0 0 1
1 0 0
0 1 0
1 0 0