-
参见
- 函 数
- Diff
- LongestCommonSequence
- LongestCommonSubsequence
- SmithWatermanSimilarity
- NeedlemanWunschSimilarity
- LongestCommonSequencePositions
- LongestCommonSubsequencePositions
- SparseArray
- SequenceCases
- SequencePosition
- SequenceSplit
- StringCases
- StringPosition
- BitXor
- WarpingCorrespondence
- BioSequence
-
- 实体类型
- Gene
- Protein
-
- 格式
- FASTA
- GenBank
- PDB
- 相关指南
-
-
参见
- 函 数
- Diff
- LongestCommonSequence
- LongestCommonSubsequence
- SmithWatermanSimilarity
- NeedlemanWunschSimilarity
- LongestCommonSequencePositions
- LongestCommonSubsequencePositions
- SparseArray
- SequenceCases
- SequencePosition
- SequenceSplit
- StringCases
- StringPosition
- BitXor
- WarpingCorrespondence
- BioSequence
-
- 实体类型
- Gene
- Protein
-
- 格式
- FASTA
- GenBank
- PDB
- 相关指南
-
参见
SequenceAlignment[s1,s2]
找出字符串、列表或生物分子序列 s1 和 s2 中最佳的元素对齐序列,产生一个连续匹配和相异序列的列表.
SequenceAlignment
SequenceAlignment[s1,s2]
找出字符串、列表或生物分子序列 s1 和 s2 中最佳的元素对齐序列,产生一个连续匹配和相异序列的列表.
更多信息和选项
- SequenceAlignment[s1,s2] 给出形式为 {seg1,seg2,…} 的列表,其中每个 segi 是单个字符串或列表元素 u 的序列,表示一个匹配的片段,或一对 {u1,u2},表示 si 之间不同的片段.
- 可以给出下列选项:
-
GapPenalty 0 每次排列间隙的其它代价 IgnoreCase False 是否忽略字符串中的大小写 MergeDifferences True 是否组合相邻差异 Method "Global" 使用的对齐排列算法 SimilarityRules Automatic 元素间相似的规则 - SequenceAlignment 尝试找出一个对齐方式,使总的相似性积分最大.
- 默认情况下,SequenceAlignment 会找出整个字符串或列表 s1 和 s2 的全局 Needleman–Wunsch 对齐.
- 在选项设置 Method->"Local" 下,会找出局部的 Smith–Waterman 对齐.
- 对于足够相似的字符串或列表,局部或全局对齐方法给出相同的结果.
- SequenceAlignment 还支持 "AlignByLongestCommonSequence" 和 "AlignByLongestSubsequences" 方法,前提是 GapPenalty、MergeDifferences 和 SimilarityRules 都被设为各自的默认值.
- "Global" 和 "Local" 方法都最大化相似性分数,"AlignByLongestCommonSequence" 则最大化两个序列共有的字符或列表元素的数量.
- "AlignByLongestSubsequences" 实际上是一种分而治之的启发式近似,按最长的公共(不一定是连续的)序列进行对齐,牺牲准确性换取速度. 当序列相当接近时,对齐质量将会很好,速度比其他方法高出两个数量级.
- 在缺省设置 SimilarityRules->Automatic 下,两个元素之间的每次完全匹配会使得总的相似性积分加 1,而每次不匹配、插入或删除则使得总的相似性积分 -1.
- 支持不同名称的相似矩阵,就像在 SimilarityRules 中指定的一样.
范例
打开所有单元 关闭所有单元基本范例 (2)
SequenceAlignment["abcXabcXabc", "abcYabcYabc"]全局对齐两个 BioSequence:
SequenceAlignment[BioSequence["DNA", "CGGAGT"], BioSequence["DNA", "CGTAGT"]]选项 (8)
GapPenalty (1)
IgnoreCase (1)
SequenceAlignment 对字符串输入区分大小写:
SequenceAlignment["abcdefgHIJKlmn", "abCDEfgHIjklmn"]如果设置 IgnoreCaseTrue,SequenceAlignment 在对齐之前将两个字符串转换为小写:
SequenceAlignment["abcdefgHIJKlmn", "abCDEfgHIjklmn", IgnoreCase -> True]MergeDifferences (1)
Method (3)
SequenceAlignment["abcXXabcXabc", "abcabcYYYabc"]SequenceAlignment["abcXXabcXabc", "abcabcYYYabc", Method -> "Global"]SequenceAlignment["abcXXabcXabc", "abcabcYYYabc", Method -> "Local"]str1 = BioSequence[Entity["Gene", {"HBA1", {"Species" -> "HomoSapiens"}}]]["SequenceString"];
str2 = BioSequence[Entity["Gene", {"HBA2", {"Species" -> "HomoSapiens"}}]]["SequenceString"];"AlignByLongestCommonSequence" 方法最大化两个序列共有的字符或列表元素的数量:
matchCount[align_] := StringLength[StringJoin@@Cases[align, _String]]matchCount@SequenceAlignment[str1, str2]matchCount@SequenceAlignment[str1, str2, Method -> "AlignByLongestCommonSequence"]textA = ExampleData[{"Text", "UNHumanRightsIrish"}]//RemoveDiacritics//ToLowerCase;
textB = ExampleData[{"Text", "UNHumanRightsScottishGaelic"}]//RemoveDiacritics//ToLowerCase;对于相似的序列,"AlignByLongestSubsequences" 方法显然更快,但它给出明显更小的匹配字符集:
matchCount[align_] := StringLength[StringJoin@@Cases[align, _String]]matchCount@SequenceAlignment[textA, textB]//AbsoluteTimingmatchCount@SequenceAlignment[textA, textB, Method -> "AlignByLongestSubsequences"]//AbsoluteTimingSimilarityRules (2)
SequenceAlignment["FTFTALILLAVAV", "FTALLLAAV"]SequenceAlignment["FTFTALILLAVAV", "FTALLLAAV", SimilarityRules -> {{"V", ""} -> -10}]SequenceAlignment[BioSequence["DNA", "AAATTCCAAANNTNCCAAAA"], BioSequence["DNA", "GGTTCC"], SimilarityRules -> "SimilarDegenerateBases"]SequenceAlignment[BioSequence["DNA", "AAATTCCAAANNTNCCAAAA"], BioSequence["DNA", "GGTTCC"]]应用 (4)
SequenceAlignment["That's one small step for man", "That's one small step for a man"]SequenceAlignment["One fish two fish", "One fish two fish red fish blue fish"]SequenceAlignment["One fish two fish", "One fish two fish red fish blue fish", Method -> "Local"]human = Entity["Gene", {"BRCA1", {"Species" -> "HomoSapiens"}}]["ReferenceSequence"];
chimp = Entity["Gene", {"BRCA1", {"Species" -> "PanTroglodytes"}}]["ReferenceSequence"];StringLength /@ {human, chimp}用默认的 ("Global") 方法对齐,用 ByteCount 检查结果的大小:
ByteCount[align1 = SequenceAlignment[human, chimp]]//AbsoluteTimingByteCount[align2 = SequenceAlignment[human, chimp, Method -> "Local"]]//AbsoluteTimingByteCount[align3 = SequenceAlignment[human, chimp, Method -> "AlignByLongestCommonSequence"]]//AbsoluteTiming这种情况下,"AlignByLongestSubsequences" 方法最快,给出的结果最小:
ByteCount[align4 = SequenceAlignment[human, chimp, Method -> "AlignByLongestSubsequences"]]//AbsoluteTiming匹配片段的总长度接近,用最长的公共序列进行对齐,结果中有最大的匹配字符集:
matchCount[align_] := StringLength[StringJoin@@Cases[align, _String]]Map[matchCount, {align1, align2, align3, align4}]UNHRD = ExampleData[{"Text", "UNHumanRightsDanish"}]//RemoveDiacritics//ToLowerCase;
UNHRS = ExampleData[{"Text", "UNHumanRightsSwedish"}]//RemoveDiacritics//ToLowerCase;
Map[StringLength, {UNHRD, UNHRS}]ByteCount[align1 = SequenceAlignment[UNHRD, UNHRS]]//AbsoluteTimingByteCount[align2 = SequenceAlignment[UNHRD, UNHRS, Method -> "AlignByLongestSubsequences"]]//AbsoluteTimingmatchCount[align_] := StringLength[StringJoin@@Cases[align, _String]]matchCount[align1]matchCount[align2]可能存在的问题 (1)
巧妙范例 (1)
SequenceAlignment[BioSequence[Entity["Gene", {"HBA1", {"Species" -> "HomoSapiens"}}]], BioSequence[Entity["Gene", {"HBA2", {"Species" -> "HomoSapiens"}}]]]通过 Diff 用图形查看差异:
Diff[BioSequence[Entity["Gene", {"HBA1", {"Species" -> "HomoSapiens"}}]], BioSequence[Entity["Gene", {"HBA2", {"Species" -> "HomoSapiens"}}]]]参见
Diff LongestCommonSequence LongestCommonSubsequence SmithWatermanSimilarity NeedlemanWunschSimilarity LongestCommonSequencePositions LongestCommonSubsequencePositions SparseArray SequenceCases SequencePosition SequenceSplit StringCases StringPosition BitXor WarpingCorrespondence BioSequence
Function Repository: AlignmentToPositionDifferences AlignNearlyIdenticalSequences RemoveDegenerateSequenceDifferences ReconstituteSequenceFromReferenceDifferences DNAAlignmentPlot
相关指南
-
▪
- 序列调整和比较 ▪
- 字符串操作 ▪
- 生物分子序列 ▪
- 文本操作 ▪
- 科学数据分析 ▪
- 生命科学和医学:数据与计算 ▪
- 距离和相似度测量 ▪
- 文本分析 ▪
- 列表中的数学和统计运算 ▪
- 自然语言处理
文本
Wolfram Research (2008),SequenceAlignment,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SequenceAlignment.html (更新于 2024 年).
CMS
Wolfram 语言. 2008. "SequenceAlignment." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2024. https://reference.wolfram.com/language/ref/SequenceAlignment.html.
APA
Wolfram 语言. (2008). SequenceAlignment. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/SequenceAlignment.html 年
BibTeX
@misc{reference.wolfram_2026_sequencealignment, author="Wolfram Research", title="{SequenceAlignment}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/SequenceAlignment.html}", note=[Accessed: 12-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_sequencealignment, organization={Wolfram Research}, title={SequenceAlignment}, year={2024}, url={https://reference.wolfram.com/language/ref/SequenceAlignment.html}, note=[Accessed: 12-September-2026]}