Dyalog 中字符串操作的性能

Posted

技术标签:

【中文标题】Dyalog 中字符串操作的性能【英文标题】:Performance of string operations in Dyalog 【发布时间】:2014-08-06 12:32:26 【问题描述】:

我有 2 个与比较 Dyalog APL 中的字符向量有关的问题。 以下代码将逐一比较字符向量:

a←'ATCG'
b←'GTCA'
a=b
为了加快速度(在 2 个向量的情况下,以及在将多个向量与单个向量进行比较的情况下),我应该将字符向量转换为数字向量还是不会在 APL 中很重要(类似于在 C 中比较字符)? 我正在比较 DNA 序列(可能只包含ATCG 字母表中的字母)。我可以做些什么来加快对此类向量的各种操作?

【问题讨论】:

不,没关系,因为在一天结束时,字符以某种数字方式编码,并且比较将是数字比较。我不确定小字母表是否有任何优势。但是,如果您不关心两个字符串“如何”不匹配/匹配,而是关心它们是否相同,我建议使用匹配运算符,如果相等则返回 1,否则返回 0(我猜它会返回找到一个差异后迅速) 【参考方案1】:

有趣的是,在我的(旧)版本的 Dyalog APL 上,将字符转换为小整数实际上运行速度快了 25%。这可能在最近的版本中得到了加速。

试试

a <- []av iota 'ATCG'   // sorry, no apl characters
b <- []av iota 'GTCA'
a = b

确保最大值小于 128。

要检查您是否具有最小可能的整数表示,请使用 []dr 函数。 []dr a 应该为整数 -128

Dyalog APL 将自动转换为可能的最小整数宽度。

【讨论】:

以上是关于Dyalog 中字符串操作的性能的主要内容,如果未能解决你的问题,请参考以下文章

如何用VB.NET StringBuilder优化字符串操作性能

前端性能优化:字符串的连接操作改进

.NET与Java的子串运算性能比较

提高C#质量与性能

Java 字符串操作实例

Shell中的字符串操作