查看: 1009|回复: 9|关注: 0

[已解决] 怎么将字母矩阵转换为数字矩阵?

[复制链接]

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
下面是在win10系统下matlab 2018a版本下的代码输入:
绿色部分为什么没有转化为数字字符呢?还有就是怎么再进一步把这个数字字符矩阵转换为数字矩阵啊?非常感谢!

a='CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATG';
b='ATCGGCTGTCATGCATGCGATGCAGTGAGTTAGGGTTCCAAAGGTTCCTGGGG';
c='ATGCGGGGCCCAAATTTGGCAGTGTCTAGTCTACTATCTAGC';
d=strvcat(a,b,c)

d =

  3×64 char array

    'CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATG'
    'ATCGGCTGTCATGCATGCGATGCAGTGAGTTAGGGTTCCAAAGGTTCCTGGGG           '
    'ATGCGGGGCCCAAATTTGGCAGTGTCTAGTCTACTATCTAGC                      '

>> N=size(d);
for i=1:N(2)
switch d(i)
case 'A'
d(i)='0';
case 'T'
d(i)='1';
case 'C'
d(i)='2';
case 'G'
d(i)='3';
otherwise
;
end
end
d

d =

  3×64 char array

    '2100222100222100222100CCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATG'
    '012332131201320132301GCAGTGAGTTAGGGTTCCAAAGGTTCCTGGGG           '
    '013233332220001113320GTGTCTAGTCTACTATCTAGC                      '

论坛优秀回答者

中级

1113 麦片

财富积分


5001500


19

主题

2001

帖子

255

最佳答案
  • 关注者: 41
发表于 2018-6-19 11:54:18 | 显示全部楼层 |此回复为最佳答案
本帖最后由 sammymx 于 2018-6-19 11:58 编辑

这是一个二维数组啊,改为比如:
  1. a='CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATG';
  2. b='ATCGGCTGTCATGCATGCGATGCAGTGAGTTAGGGTTCCAAAGGTTCCTGGGG';
  3. c='ATGCGGGGCCCAAATTTGGCAGTGTCTAGTCTACTATCTAGC';
  4. d1=strvcat(a,b,c);

  5. N=size(d1);
  6. for i=1:N(1)
  7.     for j = 1:N(2)
  8.         switch d1(i,j)
  9.             case 'A'
  10.                 d(i,j)='0';
  11.             case 'T'
  12.                 d(i,j)='1';
  13.             case 'C'
  14.                 d(i,j)='2';
  15.             case 'G'
  16.                 d(i,j)='3';
  17.         end
  18.     end
  19. end
复制代码


新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-6-19 12:09:20 | 显示全部楼层
sammymx 发表于 2018-6-19 11:54
这是一个二维数组啊,改为比如:

你好,谢谢,但是报错了,你在帮忙看看,感谢!
a='CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATG';
b='ATCGGCTGTCATGCATGCGATGCAGTGAGTTAGGGTTCCAAAGGTTCCTGGGG';
c='ATGCGGGGCCCAAATTTGGCAGTGTCTAGTCTACTATCTAGC';
d1=strvcat(a,b,c);

N=size(d1);
for i=1:N(1)
    for j = 1:N(2)
        switch d1(i,j)
            case 'A'
                d(i,j)='0';
            case 'T'
                d(i,j)='1';
            case 'C'
                d(i,j)='2';
            case 'G'
                d(i,j)='3';
        end
    end
end
    for j = 1:N(2)

Error: Invalid text character. Check for unsupported symbol, invisible character, or
pasting of non-ASCII characters.

论坛优秀回答者

中级

1113 麦片

财富积分


5001500


19

主题

2001

帖子

255

最佳答案
  • 关注者: 41
发表于 2018-6-19 12:48:05 | 显示全部楼层
for j = 1:N(2)多了一行吧

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-6-19 12:55:50 | 显示全部楼层
sammymx 发表于 2018-6-19 12:48
for j = 1:N(2)多了一行吧

多一行啥意思啊?要删掉吗?可是后面程序有j这个啊,要怎么改代码啊?谢谢

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-6-19 13:14:31 | 显示全部楼层
娜娜椰子 发表于 2018-6-19 12:55
多一行啥意思啊?要删掉吗?可是后面程序有j这个啊,要怎么改代码啊?谢谢 ...

你好,我自己手动输入了一遍,发现不报错了,但是也不出现结果了
1.png

论坛优秀回答者

专家

2431 麦片

财富积分


20003000


1

主题

2699

帖子

547

最佳答案
  • 关注者: 96
发表于 2018-6-19 17:08:45 | 显示全部楼层
可以用正则表达式。
  1. a='CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATG';
  2. b='ATCGGCTGTCATGCATGCGATGCAGTGAGTTAGGGTTCCAAAGGTTCCTGGGG';
  3. c='ATGCGGGGCCCAAATTTGGCAGTGTCTAGTCTACTATCTAGC';
  4. d=cell(1,3);d{1}=a;d{2}=b;d{3}=c;
  5. st=['A';'T';'C';'G'];re=num2str([0:3]');
  6. for i=1:4
  7. d=regexprep(d,st(i),re(i));
  8. end
  9. d=strvcat(d{:});
复制代码

论坛优秀回答者

中级

1113 麦片

财富积分


5001500


19

主题

2001

帖子

255

最佳答案
  • 关注者: 41
发表于 2018-6-19 17:28:03 | 显示全部楼层
娜娜椰子 发表于 2018-6-19 13:14
你好,我自己手动输入了一遍,发现不报错了,但是也不出现结果了

结果在工作区里面

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-6-19 19:04:16 | 显示全部楼层
maple1314168 发表于 2018-6-19 17:08
可以用正则表达式。

谢谢,已解决

新手

42 麦片

财富积分


050


7

主题

58

帖子

5

最佳答案
发表于 2018-6-20 22:49:51 | 显示全部楼层
楼主试试这个方法,copy后直接运行。
clear;clc;
a='CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATG';
b='ATCGGCTGTCATGCATGCGATGCAGTGAGTTAGGGTTCCAAAGGTTCCTGGGG';
c='ATGCGGGGCCCAAATTTGGCAGTGTCTAGTCTACTATCTAGC';
d = [a b c];
leng = length(d)
g1 =  'A' *ones(1,leng) ;
g2 =  'T' *ones(1,leng) ;
g3 = 'C'*ones(1,leng);
g4 = 'G'*ones(1,leng);
tt = (g1 == d)*0 + ( g2 == d )*1 + ( g3 == d)*2 + (g4 == d)*3';
num2str(tt)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表