在单独矩阵中存储生成的随机矩阵的指数

时间:2017-03-18 16:52:12

标签: matlab random

我正在生成一个9 * 9矩阵的随机图G:

G = round(rand(9));
G = triu(G) + triu(G,1)';
G = G - diag(diag(G))

我从上面的矩阵中随机提取一些行和列:

k = randperm(9);
mnew = G(k(1:4),k(2:6));

mnew =

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

现在,我想创建一个矩阵,存储在mnew

中提取的行和列的索引

1 个答案:

答案 0 :(得分:0)

mnew中,您已经提取了矩阵G中的元素 k(1:4)k(2:6)列中提供的行,因此,如果我理解了您的问题,则必须生成k(1:4)k(2:6)给出的可能情侣。

定义:

k_r=k(1:4)
k_c=k(2:6)

您可以通过这种方式生成情侣():

row_idx=reshape(repmat(k_r,length(k_c),1),20,1)
col_idx=reshape(repmat(k_c,length(k_r),1)',20,1)
idx=[row_idx col_idx]

或者,只需循环生成k_rk_c值 不同的夫妇:

idx=[];
for i=1:length(k_r)
   for j=1:length(k_c)
      idx=[idx;k_r(i) k_c(j)];
   end
end

如果,例如:

k_r=[1 8 9 7]

k_c=[8 9 7 6 5]

你得到:

idx=[1     8
     1     9
     1     7
     1     6
     1     5
     8     8
     8     9
     8     7
     8     6
     8     5
     9     8
     9     9
     9     7
     9     6
     9     5
     7     8
     7     9
     7     7
     7     6
     7     5];

第一列包含行索引,第二列包含列索引。

您可以reshape生成的索引矩阵,以便更好地表示 结果:

reshape_idx=reshape(idx',2,5,4)

这将生成以下(2x5x4)矩阵,其中每个(:,:,i)块表示mnew的每一行的行索引(第一行)和列索引(第二行)_: / p>

reshape_idx(:,:,1) =
     1     1     1     1     1
     8     9     7     6     5

reshape_idx(:,:,2) =
     8     8     8     8     8
     8     9     7     6     5

reshape_idx(:,:,3) =
     9     9     9     9     9
     8     9     7     6     5

reshape_idx(:,:,4) =
     7     7     7     7     7
     8     9     7     6     5

希望这有帮助,

Qapla'