python实现mask矩阵示例(根据列表所给元素)
行和列的位置都在以下三个列表中的一列中,则对应位置为1,其余位置全为0
——[7-56,239-327,438-454,522-556,574-586]
——[57-85,96-112,221-238]
——[113-220,328-437,455-521,557-573]
代码实现
defgenerateMaskBasedOnDom(dom_path,length):
"""
:paramdom_path:thisisafilepath,whichcontainsthefollowinginformation:
[7-56,239-327,438-454,522-556,574-586][57-85,96-112,221-238][113-220,328-437,455-521,557-573]
each[...]meansonedomain
:paramlength:thisisthelengthofthisprotein
:return:themaskmatrixwithsizelengthxlength,1meansinnerdomainresiduepair,otherwise0
"""
#读取文件
withopen(dom_path,"r",encoding="utf-8")asfile:
contents=file.readlines()
#获得mask位置数据
list0=[]
list1=[]
list2=[]
forlist_idx,contentinenumerate(contents):
num_range_list=content.strip()[1:-1].split(",")
fornum_rangeinnum_range_list:
start_num=int(num_range.split("-")[0])
end_num=int(num_range.split("-")[1])
fornuminrange(start_num,end_num+1):
iflist_idx==0:
list0.append(num)
eliflist_idx==1:
list1.append(num)
else:
list2.append(num)
mask=np.zeros((length,length))
#遍历矩阵每个元素
forrowinrange(mask.shape[0]):
forcolinrange(mask.shape[1]):
if(rowinlist0andcolinlist0)or(rowinlist1andcolinlist1)or(rowinlist2andcolinlist2):
mask[row][col]=1
returnmask
if__name__=="__main__":
#ifnodomfile,pleasegetdomfilefirst
withopen("dom.txt","w",encoding="utf-8")asf:
f.write("[7-56,239-327,438-454,522-556,574-586]"+"\n"+"[57-85,96-112,221-238]"+"\n"+"[113-220,328-437,455-521,557-573]")
file_path="./dom.txt"
protein_length=1000#mask_matrixsize
mask_matrix=generateMaskBasedOnDom(file_path,protein_length)
print("*************GenerateMaskMatrixSuccessful!*************")
#随机测试几组
print(mask_matrix[7][56])#1
print(mask_matrix[7][239])#1
print(mask_matrix[8][57])#0
print(mask_matrix[57][95])#0
print(mask_matrix[113][573])#1
到此这篇关于python实现mask矩阵示例(根据列表所给元素)的文章就介绍到这了,更多相关python实现mask矩阵内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!