Используя np.chararray
, вы получаете массив с S
dtype, bytestrings:
In [145]: x = np.chararray((1,),10)
In [146]: x[0]='ACT'
In [147]: x
Out[147]: chararray([b'ACT'], dtype='|S10')
In [148]: x[0]
Out[148]: b'ACT'
In [149]: x[0][0]
Out[149]: 65
In [150]: x[0][1]
Out[150]: 67
In [151]: x[0][2]
Out[151]: 84
Это один байт на символ. Код ASCII A
составляет 65; T
на 19 символов дальше.
Вы видели примечание chararray
:
Класс chararray
существует для обратной совместимости с Numarray, он не рекомендуется для новых разработок. Начиная с numpy 1.4, если нужны массивы строк, рекомендуется использовать массивы dtype
object_
, string_
или unicode_
и использовать бесплатные функции в модуле numpy.char
для быстрой векторизации строковые операции.
In [159]: x = np.array([b'ACT'])
In [160]: x
Out[160]: array([b'ACT'], dtype='|S3')
In [161]: x[0]
Out[161]: b'ACT'
In [162]: x[0][0]
Out[162]: 65
Если вместо этого мы используем тип строки Py3 по умолчанию (Unicode):
In [154]: x = np.array(['ACT'])
In [155]: x
Out[155]: array(['ACT'], dtype='<U3')
In [156]: x[0]
Out[156]: 'ACT'
In [157]: x[0][0]
Out[157]: 'A'
In [158]: x[0][1]
Out[158]: 'C'
===
Я думаю, что сбор значений в списке или словаре было бы проще:
In [165]: txt = """>Sequence 1
...: TCAGAACCAGTTATAAATTTATCATTTCCTTCTCCACTCCT
...: >Sequence 2
...: CCCACGCAGCCGCCCTCCTCCCCGGTCACTGACTGGTCCTG
...: >Sequence 3
...: TCGACCCTCTGGAACCTATCAGGGACCACAGTCAGCCAGGCAAG
...: >Sequence 4
...: AAAACACTTGAGGGAGCAGATAACTGGGCCAACCATGACTC"""
In [166]: alist = []
In [167]: for row in txt.splitlines():
...: if row.startswith('>'):
...: x = [row]
...: else:
...: x.append(row)
...: alist.append(x)
...:
In [168]: alist
Out[168]:
[['>Sequence 1', 'TCAGAACCAGTTATAAATTTATCATTTCCTTCTCCACTCCT'],
['>Sequence 2', 'CCCACGCAGCCGCCCTCCTCCCCGGTCACTGACTGGTCCTG'],
['>Sequence 3', 'TCGACCCTCTGGAACCTATCAGGGACCACAGTCAGCCAGGCAAG'],
['>Sequence 4', 'AAAACACTTGAGGGAGCAGATAACTGGGCCAACCATGACTC']]
In [169]: dd = {key:val for key,val in alist}
In [170]: dd
Out[170]:
{'>Sequence 1': 'TCAGAACCAGTTATAAATTTATCATTTCCTTCTCCACTCCT',
'>Sequence 2': 'CCCACGCAGCCGCCCTCCTCCCCGGTCACTGACTGGTCCTG',
'>Sequence 3': 'TCGACCCTCTGGAACCTATCAGGGACCACAGTCAGCCAGGCAAG',
'>Sequence 4': 'AAAACACTTGAGGGAGCAGATAACTGGGCCAACCATGACTC'}
Таким образом, c обработка этих строк:
In [171]: [len(val) for key,val in alist]
Out[171]: [41, 41, 44, 41]
In [172]: [val.count('T') for key,val in alist]
Out[172]: [16, 7, 6, 6]
In [173]: [val.count('C') for key,val in alist]
Out[173]: [12, 21, 15, 10]