python kmer特征提取代码

部署运行你感兴趣的模型镜像
import itertools

def generate_kmers(k):
    """生成所有可能的k-mer组合"""
    nucleotides = ['A', 'T', 'C', 'G']
    return [''.join(kmer) for kmer in itertools.product(nucleotides, repeat=k)]

def kmer_feature_extraction(sequence, k, normalize=False):
    """
    提取DNA序列的k-mer特征
    
    参数:
        sequence (str): 输入的DNA序列
        k (int): k-mer的长度
        normalize (bool): 是否返回归一化频率
    
    返回:
        list: k-mer特征向量(出现次数或频率)
    """
    # 预处理:转换为大写并验证有效性
    sequence = sequence.upper()
    n = len(sequence)
    valid_chars = {'A', 'T', 'C', 'G'}
    
    # 参数校验
    if k < 1:
        raise ValueError("k必须为不小于1的整数")
    if k > n:
        return [0] * (4**k) if normalize else [0] * (4**k)
    
    # 生成所有可能的k-mer
    all_kmers = generate_kmers(k)
    kmer_counts = {kmer: 0 for kmer in all_kmers}
    total_valid = 0  # 有效k-mer总数
    
    # 滑动窗口统计
    for i in range(n - k + 1):
        current_kmer = sequence[i:i+k]
        if all(c in valid_chars for c in current_kmer):
            kmer_counts[current_kmer] += 1
            total_valid += 1
    
    # 生成特征向量
    features = []
    for kmer in all_kmers:
        count = kmer_counts[kmer]
        if normalize and total_valid > 0:
            features.append(count / total_valid)
        else:
            features.append(count)
    
    return features

# 示例用法
if __name__ == "__main__":
    dna_sequence = "ATGCTAGCTA"
    k = 3
    
    # 获取原始计数特征
    features = kmer_feature_extraction(dna_sequence, k)
    print(f"k-mer计数特征(k={k}):", features[:10], "...")  # 打印前10个特征
    
    # 获取归一化特征
    normalized_features = kmer_feature_extraction(dna_sequence, k, normalize=True)
    print(f"归一化k-mer特征(k={k}):", normalized_features[:10], "...")

###一个小例子,比较简单但是可以根据后续进行丰满。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终是蝶衣梦晓楼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值