相关疑难解决方法(0)

如何绘制DNA序列的基因图表说ATGCCGCTGCGC?

我需要根据病毒的DNA序列生成随机游走,给出其2k碱基对的碱基对序列.序列看起来像"ATGCGTCGTAACGT".路径应向右转为A,向左转为T,向上转为G,向下转向C.如何为此目的使用Matlab,Mathematica或SPSS?

matlab wolfram-mathematica bioinformatics dna-sequence

34
推荐指数
5
解决办法
3754
查看次数

使用Compile有效处理小向量列表

我们经常需要处理由坐标列表组成的数据:data = {{x1,y1}, {x2,y2}, ..., {xn,yn}}.它可以是2D或3D坐标,或固定长度小矢量的任何其他任意长度列表.

让我Compile通过总结2D向量列表的简单示例来说明如何使用这些问题:

data = RandomReal[1, {1000000, 2}];
Run Code Online (Sandbox Code Playgroud)

一,显而易见的版本:

fun1 = Compile[{{vec, _Real, 2}},
  Module[{sum = vec[[1]]},
   Do[sum += vec[[i]], {i, 2, Length[vec]}];
   sum
   ]
  ]
Run Code Online (Sandbox Code Playgroud)

它有多快?

In[13]:= Do[fun1[data], {10}] // Timing
Out[13]= {4.812, Null}
Run Code Online (Sandbox Code Playgroud)

二,不太明显的版本:

fun2 = Compile[{{vec, _Real, 1}},
  Module[{sum = vec[[1]]},
   Do[sum += vec[[i]], {i, 2, Length[vec]}];
   sum
   ]
  ]

In[18]:= Do[
  fun2 /@ Transpose[data],
  {10}
  ] // Timing

Out[18]= {1.078, Null}
Run Code Online (Sandbox Code Playgroud)

如您所见,第二个版本要快得多.为什么?因为关键操作sum += ...是添加数字,fun2而它是添加 …

wolfram-mathematica

10
推荐指数
2
解决办法
2793
查看次数