这段代码实现了对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]])