1

我希望有人能够向我展示一种在数学中编写代码的更有效的方法。

我有一个表,其中有一列(绝对)时间,第二列包含一个字符串,该字符串与同一行的时间和下一行的时间之间的时间段相关联。这些时间都是有规律的间隔。我还有第二个不规则时间列表,我想要一个与该时间段相关联的字符串列表。

我已经使用以下代码完成了它:

regulartime={{1800,a},{3600,b},{5400,b}}  
irregtime={2054,2817,3060,4594, 5123}


flooredtimes=Floor[irregtime,1800]  
position=Table[Position[regulartime,flooredtimes[[i]]],{i,Length[flooredtimes]}]  
lastlist=Table[regulartime[[position[[i,1,1]],2]],{i,Length[flooredtimes]}]  

这会输出一个列表 {a,a,a,b,b},然后我可以将其与我的不规则时间列表结合起来。我的问题是我试图做很长的(〜500 000)列表并且需要很长时间,有没有更好的方法来做到这一点?提前感谢您的帮助!

4

2 回答 2

2

这里有两个想法..

Function[ ireg, 
      Last@Last@
            Select[regulartime, #[[1]] == Floor[ireg, 1800] &]] /@ irregtime


(*{a, a, a, b, b}*)



Last@regulartime[[Floor[#, 1800]/1800]] & /@ irregtime

(*{a, a, a, b, b}*)
于 2013-08-01T15:55:43.307 回答
0

这是乔治第二种方法的变体:

regulartime[[Quotient[#, 1800], 2]] & /@ irregtime
{a, a, a, b, b}

请注意,如果值小于 1800,您将收到错误消息;您可能需要单独处理:

time[x_ /; x >= 1800] := regulartime[[Quotient[x, 1800], 2]]
time[else_] := Missing[]

time /@ {356, 3060, 4594}
{Missing[], a, b}
于 2013-08-05T22:03:33.173 回答