Re: [討論] 矩陣排列組合
※ 引述《whale0821 (DorisTsai)》之銘言:
: 想請問關於一個矩陣的問題
: 舉例
: 若有兩個矩陣為
: A=[1 2 3]
: B=[4 5 6]
: 想組合成
: C=[1 2 3;
: 1 2 6;
: 1 5 3;
: 1 5 6;
: 4 2 3;
: 4 2 6;
: 4 5 3;
: 4 5 6;]
: 8種排列組合,
: 第一個位置只有1,4 兩個選擇
: 第二個位置只有2,5 兩個選擇
: ...以次類推
: 請問有比較快的指令或是怎麼寫迴圈比較好呢?
: 如果矩陣皆是1*n的話
: 謝謝
想法很簡單,因為只從兩個向量去排
而且他的排列方式有限,先知道他的dim有多大就很簡單了
number of rows(rowNum)就depends on你的input vectors: a, b有多少個一樣
如果兩個元素不同,那就先每一個都重複rowNum/2次
第二次兩個元素不同就,每一個重複rowNum/4次,全部在重複一次
剩下依此類推,然後如果相同就全部都用一樣的取代。
程式碼如下:
% 先寫一個rep的函數
***********rep.m************
function vec_output=rep(vec_input, each, times)
vec_output=repmat(vec_input, each, times);
vec_output=vec_output(:);
***********main.m*************
function mat=main(v1,v2)
% input v1 and v2
% output mat
vec_eq = v1~=v2;
rowNum = 2^sum(vec_eq);
each = rowNum/2;
times = rowNum/each/2;
for i=1:length(v1)
if(vec_eq(i)==1)
mat(:,i)=rep([v1(i) v2(i)],each,times);
each=each/2;
times=rowNum/each/2;
else
mat(:,i)=rep(v1(i), 1, rowNum);
end
end
***********test 1**************
v1=1:3;
v2=4:6;
mat=main(v1,v2);
mat
1 2 3
1 2 6
1 5 3
1 5 6
4 2 3
4 2 6
4 5 3
4 5 6
***********test 2**************
v1 = 1:5;
v2 = [2 2 3 3 5];
mat=main(v1,v2);
mat
1 2 3 4 5
1 2 3 3 5
2 2 3 4 5
2 2 3 3 5
**********The End**************
希望有幫助到你。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.164.166.108
※ 編輯: celestialgod 來自: 218.164.166.108 (09/08 04:09)
→
09/08 04:10, , 1F
09/08 04:10, 1F
※ 編輯: celestialgod 來自: 218.164.166.108 (09/08 16:12)
討論串 (同標題文章)