这段代码实现了对DNA序列的k-mer直接向量化。

给定序列 "ATCGATCG" 和 k-mer 大小 k=3,代码首先生成所有可能的k-mers,然后将每个k-mer转换为一个由one-hot编码组成的向量。

每个碱基(A, T, C, G)被编码为一个4维的向量,其中一个位置为1,其余为0,代表该碱基的存在。

例如,对于第一个k-mer "ATC",其向量化表示是 [1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0],其中 "A" 表示为 [1, 0, 0, 0],"T" 表示为 [0, 0, 0, 1],"C" 表示为 [0, 1, 0, 0]。

这种向量化方法为每个k-mer生成一个固定长度的向量,可以直接用于深度学习模型的输入。


    
#==========================================
# This code was written by Sihua Peng, PhD.
#==========================================

import numpy as np

def kmer_vectorization(sequence, k):
    """将给定的DNA序列转换为k-mer的向量化表示"""

    # 定义碱基到数字的映射
    base_to_num = {'A': 0, 'C': 1, 'G': 2, 'T': 3}

    # 生成k-mer
    kmers = [sequence[i:i+k] for i in range(len(sequence) - k + 1)]

    # 初始化向量列表
    vectorized_kmers = []

    # 遍历每个k-mer,并将其转换为向量
    for kmer in kmers:
        vector = []
        for base in kmer:
            # 使用one-hot编码(每个碱基为4维向量)
            base_vector = [0, 0, 0, 0]
            if base in base_to_num:
                base_vector[base_to_num[base]] = 1
            vector.extend(base_vector)
        vectorized_kmers.append(vector)

    return np.array(vectorized_kmers)

# 示例DNA序列
sequence = "ATCGATCG"

# k-mer大小
k = 3

# 对序列进行k-mer向量化
vectorized_sequence = kmer_vectorization(sequence, k)
vectorized_sequence

Result
array([[1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0],
       [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0],
       [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0],
       [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1],
       [1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0],
       [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0]])