作者yshlai (YshLai)
看板MATLAB
标题[问题]比对 排列组合
时间Thu Apr 11 00:03:05 2013
各位好
想请问一下
我的题目是
每个病患都有五个基因
ex gg aa cc ca gg 有/无高血压
每个基因都有3种类型
五个基因会影响有无高血压
现在要分别取 4,3,2个基因做比对
首先是用pso 撒10个例子 去比对原资料库
以下是我目前写的 找出4个基因 去比对
问题来了 4个一组 只有5种组合 我用最笨的方法写
但是现在要用3个一组 2个一组 排列组合变多
请问有什麽方法可以自己取排列组合
还是MATLAB新手
请多多指教
clear;clc;clear all;
%% 读档
Data=xlsread('Data.xls');
DataSize=size(Data);
%% 创造 10 个粒子
for i=1:10
particle(i,1:4)=randsrc(1,4,1:3);
end
particleSize=size(particle);
Record=[];
k=1;%Index of Record
A_index=1;
%% 比对
for i=1:DataSize(1)
for j=1:particleSize(1)
%% 根据不同的组合进行比对
if Data(i,[1,2,3,4])==particle(j,1:end)
Record(k,1:2)=[1,j];%%如果与第j例子相同,则纪录第一组与第j个例子
k=k+1;
end
if Data(i,[1,2,3,5])==particle(j,1:end)
Record(k,1:2)=[2,j];
k=k+1;
end
if Data(i,[1,2,4,5])==particle(j,1:end)
Record(k,1:2)=[3,j];
k=k+1;
end
if Data(i,[1,3,4,5])==particle(j,1:end)
Record(k,1:2)=[4,j];
k=k+1;
end
if Data(i,[2,3,4,5])==particle(j,1:end)
Record(k,1:2)=[5,j];
k=k+1;
end
end
end
Record=sort(Record);
Recordzie=size(Record);
for i=1:Recordzie(1)
if Record(i,1)==1
A(A_index,1:2)=Record(i,1:end)
A_index=A_index+1;
Final(1,1)=mode(A(1:end,2))
end
if Record(i,1)==2
A(A_index,1:2)=Record(i,1:end)
A_index=A_index+1;
Final(2,1)=mode(A(1:end,2))
end
if Record(i,1)==3
A(A_index,1:2)=Record(i,1:end)
A_index=A_index+1;
Final(3,1)=mode(A(1:end,2))
end
if Record(i,1)==4
A(A_index,1:2)=Record(i,1:end)
A_index=A_index+1;
Final(4,1)=mode(A(1:end,2))
end
if Record(i,1)==5
A(A_index,1:2)=Record(i,1:end)
A_index=A_index+1;
Final(5,1)=mode(A(1:end,2))
end
end
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.254.132.33
1F:→ jatj:X={'gg' 'aa' 'cc' 'ca' 'gg'}; Y=nchoosek(X,2); 3 4 ... 04/11 07:52
2F:→ yshlai:可是我每个基因里各有3种种类{'gg' 'aa' 'cc' 'ca' 'gg'} 04/12 01:17
3F:→ yshlai:只是其中一种 04/12 01:17