一小段背景:
我正在设计用于原位杂交的分子探针,以便能够研究特定基因在各种组织中的表达。 为了做到这一点,我需要在该基因中找到最符合某些标准的序列。 使用Matlab中 Bioinformatics Toolbox 中的 oligoprop 函数分析序列。
问题:
该程序需要一些时间,我想优化它。我使用过Matlab Profiler并将这行代码识别为最耗时的代码之一。
oligopropsOfSequences = arrayfun(@(x) oligoprop(char(x), ...
'Dimerlength', 3, ...
'HPBase', 3), ...
sequences);
序列是1byX单元格数组。它通常大约3000元素。
oligoprop 是Bioinformatics Toolbox的功能
我的分析需要 oligoprop Dimerlength和HPBase的参数
我做了同样的"操作"已经在for循环中,使用arrayfun只是略微增加了整体性能。到目前为止,似乎 oligoprop 本身只需要时间,这是可以理解的。
我还必须承认我是Matlab新手的本地Python程序员,所以我还不熟悉使用哪种结构,以及一般Matlab如何做事。所以欢迎任何类型的支持信息。
这里测试它是一个示例短序列单元阵列
sequences = {'caccagtggatgctagccgccctgctggccccggggatggacgtc', 'accagtggatgctagccgccctgctggccccggggatggacgtcc', 'ccagtggatgctagccgccctgctggccccggggatggacgtcca', 'cagtggatgctagccgccctgctggccccggggatggacgtccaa', 'agtggatgctagccgccctgctggccccggggatggacgtccaaa'}
编辑1:
正如所建议的那样,我尝试使用cellfun
,起初我遇到了一些错误,但是能够摆脱它们,只是遇到了语义问题。
代码如下:
oligopropsOfSequences = cellfun(@(x) oligoprop(x, ...
'Dimerlength', 3, ...
'HPBase', 3), ...
sequences, 'UniformOutput', false);
代码不会产生任何错误,但我得到的是1byX单元数组,包含我的结构,而不是获取Xby1结构数组。 我不知道如何将该单元阵列转换回结构数组,而且我担心操作本身可能会很昂贵。
由于我后来的操作依赖于结构数组,我无法正确分析整个函数以查看是否有任何速度增益。