我需要根据病毒的DNA序列生成随机游走,给出其2k碱基对的碱基对序列.序列看起来像"ATGCGTCGTAACGT".路径应向右转为A,向左转为T,向上转为G,向下转向C.如何为此目的使用Matlab,Mathematica或SPSS?
我们经常需要处理由坐标列表组成的数据: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而它是添加 …