我想要做的是从文件中绘制两行,如下所示:
number pair atom count shift error
1 ALA ALA CA 7624 1.35 0.13
1 ALA ALA HA 7494 19.67 11.44
38 ARG LYS CA 3395 35.32 9.52
38 ARG LYS HA 3217 1.19 0.38
38 ARG LYS CB 3061 0.54 1.47
39 ARG MET CA 1115 35.62 13.08
39 ARG MET HA 1018 1.93 0.20
39 ARG MET CB 976 1.80 0.34
我想要做的是使用原子值绘制包含原子CA和CB的行。 所以基本上我想做:
atomtypemask_ca = data['atom'] == 'CA'
xaxis = np.array(data['shift'][atomtypemask_ca])
aa, atom = data['aa'][atomtypemask_ca], data['atom'][atomtypemask_ca]
atomtypemask_cb = data['atom'] == 'CB'
yaxis = np.array(data['shift'][atomtypemask_cb])
plot (xaxis, yaxis)
什么是毁了我的一天是某些价值观没有CB条目的原因。我如何绘制这种东西,忽略只有两个原子值中的一个设置的条目?我当然可以编程,但我认为这应该可以使用掩码 生成更清洁的代码
答案 0 :(得分:2)
我猜,第一列是残留数。用那个。我不知道您的数据结构或shift
所指的内容,但您应该可以执行以下操作:
In : residues
Out: array([ 1, 1, 38, 38, 38, 39, 39, 39])
In : atom
Out:
array(['CA', 'HA', 'CA', 'HA', 'CB', 'CA', 'HA', 'CB'],
dtype='|S2')
In : shift
Out: array([7624, 7494, 3395, 3217, 3061, 1115, 1018, 976])
# rows with name 'CB'
In : cb = atom=='CB'
# rows with name 'CA' _and_ residues same as 'CB'
In : ca = numpy.logical_and(numpy.in1d(residues, residues[cb]), atom=='CA')
# or if in1d is not available
# ca = numpy.logical_and([(residue in residues[cb]) for residue in residues], atom=='CA')
In : shift[ca]
Out: array([3395, 1115])
In : shift[cb]
Out: array([3061, 976])