Q:workspace没有显示变量的值
A:这是因为子程序里的变量是局部变量,他们的作用域就是子函数内部,会在流程控制回到主调函数前被系统自动释放掉,所以,一旦子程序运行完,你是不可能再查看子程序里的变量的,因为这些变量已经不存在了。如果只是出于调试的目的想查看子程序里的变量,可以在子程序结束前(最后一句)设置 断点,让流程控制暂时停留在子程序里,这样,你是可以在workspace里查看变量的。如果需要在主程序里调用子程序里的变量,可以将这些变量用函数返回值返回给主调程序。如果需要在多个子程序里查看某个子程序的变量,那也可以将该变量定义为全局变量
for循环的局限性:
矩阵的长宽上百上千,我调用了三层循环,运行了半个小时还是算不出来,速度非常慢,代码如下
gTP = zeros(size(drug_protein, ), size(complex_protein, )); %drug和complex的交集数矩阵
for i = :size(drug_protein, )for j = :size(complex_protein, )for z = :size(index_of_drug)
if drug_protein(i, index_of_drug(z)) == && complex_protein(j, index_of_protein_to_drug(z)) ==
gTP(i,j) = gTP(i,j) + ;
end;
end;
end;
end;
利用matlab处理向量的速度快得多的特性,修改了代码
list_of_drug = drug_protein(:, index_of_drug); %只选取含共有蛋白质的部分矩阵,这一步关键
list_of_complex = complex_protein(:, index_of_protein_to_drug);
gTP = zeros(size(list_of_drug, ), size(list_of_complex, ));
for i = :size(list_of_drug, )
for j = :size(list_of_complex, )
list_var = list_of_drug(i,:) + list_of_complex(j,:);
gTP(i, j) = sum(list_var(:) == ); %即只有两个值都为1时才统计
end
end
几分钟就能得到结果,速度提高了许多。
n维向量到一维向量 subscripts (r
,c
)->mat(idx)
idx = r + (c-1)*size(M,1)
A矩阵的一维索引B转化为二维索引
[m,n]=ind2sub(size(A),B)
将excel中的关系型数据转换为邻接矩阵
[data,text] = xlsread('old_db.xls');
chemical = unique(text(:,));
disease = unique(text(:,));
chemical_disease_interaction_matrix = zeros(size(chemical,),size(disease,)); for i=:size(chemical,)
for j=:size(disease,)
if(intersect(strmatch(chemical(i),text(:,)), strmatch(disease(j),text(:,))))
chemical_disease_interaction_matrix(i,j) = ;
end
end
end