Wolfram mathematica Mathematica中使用位置的高效编码

Wolfram mathematica Mathematica中使用位置的高效编码,wolfram-mathematica,Wolfram Mathematica,我希望有人能向我展示一种用mathematica编写代码的更有效的方法 我得到了一个表,它有一列(绝对)时间,第二列包含一个字符串,该字符串与同一行上的时间和下一行上的时间之间的时间段相关联。这些时间间隔都是有规律的。我还有第二个不规则时间列表,我想有一个与该时间段相关联的字符串列表 我使用以下代码完成了此操作: regulartime={{1800,a},{3600,b},{5400,b}} irregtime={2054,2817,3060,4594, 5123} flooredti

我希望有人能向我展示一种用mathematica编写代码的更有效的方法

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

我使用以下代码完成了此操作:

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},然后我可以将它与我的不规则时间列表结合起来。我的问题是,我正在尝试为长(~500000)列表执行此操作,这需要很长时间,是否有更好的方法来执行此操作??提前感谢您的帮助

这里有两个想法

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}*)

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

regulartime[[Quotient[#, 1800], 2]] & /@ irregtime
请注意,您将得到一个值小于1800的错误;您可能需要单独处理该问题:

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

time /@ {356, 3060, 4594}

乔治,你能考虑指导新用户比如@ USER 2642620吗?
time[x_ /; x >= 1800] := regulartime[[Quotient[x, 1800], 2]]
time[else_] := Missing[]

time /@ {356, 3060, 4594}
{Missing[], a, b}