skbio.sequence.Sequence.to_indices#

Sequence.to_indices(alphabet=None, mask_gaps='auto', wildcard='auto', return_codes=False)[source]#

Convert the sequence into indices of characters.

The result will be indices of characters in an alphabet, if provided, otherwise indices of unique characters observed in the sequence, in which case the unique characters in sorted order will also be returned.

Parameters:
alphabetiterable of scalar or skbio.SubstitutionMatrix, optional

Explicitly provided alphabet. The returned indices will be indices of characters in this alphabet. If None, will return indices of unique characters observed in the sequence.s

mask_gaps‘auto’ or bool, optional

Mask gap characters in the sequence, and return a masked array instead of a standard array. The gap characters are defined by the sequence’s gap_characters attribute. If ‘auto’ (default), will return a standard array if no gap character is found, or a masked array if gap character(s) are found.

wildcard‘auto’, str of length 1 or None, optional

A character to subsitute characters in the sequence that are absent from the alphabet. If ‘auto’ (default), will adopt the sequence’s wildcard_char attribute (if available). If no wildcard is given and there are absent characters, will raise an error.

return_codesbool, optional

Return observed characters as an array of ASCII code points instead of a string. Not effective if alphabet is set.

Returns:
1D np.ndarray or np.ma.ndarray of uint8

Vector of character indices representing the sequence

str or 1D np.array of uint8, optional

Sorted unique characters observed in the sequence.

Raises:
ValueError

If alphabet are not valid ASCII characters or contains duplicates.

ValueError

If gap(s) are to be masked but gap character(s) are not defined.

ValueError

If wildcard character is not a valid ASCII character.

Examples

Convert a protein sequence into indices of unique amino acids in it. Note that the unique characters are ordered.

>>> from skbio import Protein
>>> seq = Protein('MEEPQSDPSV')
>>> idx, uniq = seq.to_indices()
>>> idx
array([2, 1, 1, 3, 4, 5, 0, 3, 5, 6], dtype=uint8)
>>> uniq
'DEMPQSV'

Convert a DNA sequence into indices of nucleotides in an alphabet. Note that the order of characters is consistent with the alphabet.

>>> from skbio import DNA
>>> seq = DNA('CTCAAAAGTC')
>>> idx = seq.to_indices(alphabet='TCGA')
>>> idx
array([1, 0, 1, 3, 3, 3, 3, 2, 0, 1], dtype=uint8)

Use the alphabet included in a substitution matrix.

>>> from skbio import SubstitutionMatrix
>>> sm = SubstitutionMatrix.by_name('NUC.4.4')
>>> idx = seq.to_indices(alphabet=sm)
>>> idx
array([3, 1, 3, 0, 0, 0, 0, 2, 1, 3], dtype=uint8)

Gap characters (“-” and “.”) in the sequence will be masked (mask_gaps=’auto’ is the default behavior).

>>> seq = DNA('GAG-CTC')
>>> idx = seq.to_indices(alphabet='ACGTN', mask_gaps='auto')
>>> print(idx)
[2 0 2 -- 1 3 1]
>>> print(idx.mask)
[False False False  True False False False]

Characters not included in the alphabet will be substituted with a wildcard character, such as “N” for nucleotides and “X” for amino acids (wildcard=’auto’ is the default behavior).

>>> seq = DNA('GAGRCTC')
>>> idx = seq.to_indices(alphabet='ACGTN', wildcard='auto')
>>> idx
array([2, 0, 2, 4, 1, 3, 1], dtype=uint8)