MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   求 ~程序讲解 (https://www.labfans.com/bbs/showthread.php?t=5524)

southtown 2008-11-28 13:41

求 ~程序讲解
 
这是一段DNA序列转换成数字的程序,望高手指教第二行程序是什么意思?:lovely:

A='aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggaggacgaggtaaaggaggcttgtctacggccggaagtgaagggggatatgaccgcttgg';

A=(A=='a')+(A=='t')*2+(A=='c')*3+(A=='g')*4;

haiyunyuan 2008-11-28 22:58

回复: 求 ~程序讲解
 
很明显是将字符串A转换成一个数值数组,该数值数组与原数组对应,用1表示a,2表示t,3表示c,4表示g。

southtown 2008-11-29 09:57

回复: 求 ~程序讲解
 
[QUOTE=haiyunyuan;20862]很明显是将字符串A转换成一个数值数组,该数值数组与原数组对应,用1表示a,2表示t,3表示c,4表示g。[/QUOTE]

为什么他们之间使“*”号呢,如果(A=='t')*2不是乘以2吗?
这里的+ * 符号是不是四则运算符号啊?:lovely:

haiyunyuan 2008-11-29 22:20

回复: 求 ~程序讲解
 
(A=='a')是一个关系表达式,得到一个逻辑矩阵,再乘以2,得到一个数值矩阵。

southtown 2008-11-30 10:02

回复: 求 ~程序讲解
 
[QUOTE=haiyunyuan;20943](A=='a')是一个关系表达式,得到一个逻辑矩阵,再乘以2,得到一个数值矩阵。[/QUOTE]


那照理说,应该是A=(a个数)*1+(b的个数)*2+(c的个数)*3+(d的个数*4)啊,结果没那么大的啊~~:ft:

debateshang 2008-11-30 12:12

回复: 求 ~程序讲解
 
[QUOTE=southtown;20957]那照理说,应该是A=(a个数)*1+(b的个数)*2+(c的个数)*3+(d的个数*4)啊,结果没那么大的啊~~:ft:[/QUOTE]

不是等于A=='a'的意思就是判断A中a的位置,在a的对应位置赋值是1,其余是零,A开始虽然是字符型量但它也有长度,他的长度就是有多少个字母
你这个程序就是形成一个110的行向量,将a-1,t-2,c-3,g-4这样替换

southtown 2008-11-30 12:51

回复: 求 ~程序讲解
 
我想明白了,应该是这样

程序对A中的各个元素从起始位置逐个开始判断,当判断到某位时把它与a,t,c,g四个符号常量比较,若不等则用判断后的"0"乘以对应权值,若相等则用判断后的"1"乘以对应权值,最后相加,赋值给A中该元素位置


所有时间均为北京时间。现在的时间是 14:19

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.