TimeSeriesMapThread[f,tes]
为时间或事件序列数据 tes 的每个 {t,x} 对创建一个新的时间序列,其时间-数值对为 {t,f[t,x]}.
TimeSeriesMapThread[f,tes,{{a1,a2,…},{b1,b2,…},…}]
对 tes 给出 {{t1,f[t1,x1,a1,b1,…]},{t2,f[t2,x2,a2,b2,…]},…}.
TimeSeriesMapThread
TimeSeriesMapThread[f,tes]
为时间或事件序列数据 tes 的每个 {t,x} 对创建一个新的时间序列,其时间-数值对为 {t,f[t,x]}.
TimeSeriesMapThread[f,tes,{{a1,a2,…},{b1,b2,…},…}]
对 tes 给出 {{t1,f[t1,x1,a1,b1,…]},{t2,f[t2,x2,a2,b2,…]},…}.
更多信息
- TimeSeriesMapThread 通常用于将函数应用于时间或事件序列中的时间和值.
- 时间序列数据 ts 可能的形式包括:
-
TimeSeries[…] 连续的按时间排序的采样数据 EventSeries[…] 具有相应值的时序事件 TemporalData[…] 由时间-值数据对组成的路径集合 {x1,x2,…} 数值列表,隐含从 0 开始的整数时间 {{t1,x1},{t2,x2},…} 时间-值数据对列表 - TimeSeriesMapThread[f[…]&,tes] 等价于 TimeSeriesMap[f[#Time,…]&,tes].
- TimeSeriesMapThread 逐项作用于多路径 TemporalData 对象的各个路径.
范例
打开所有单元 关闭所有单元基本范例 (3)
ts = TimeSeries[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4], Subscript[x, 5]}, {1}];TimeSeriesMapThread[f, ts]ts = TimeSeries[RandomReal[{-1, 1}, 10 ^ 3], {1}];ListPlot[ts]TimeSeriesMapThread[Sin[#1 / 100] + #2&, ts]ListPlot[%]ts = TimeSeries[Table[RandomVariate[NormalDistribution[0, σ]], {σ, 1000}]];ListPlot[ts]TimeSeriesMapThread[#2 + #3&, ts, {Subdivide[0, 50, 999]^2}]//ListPlot范围 (7)
基本用途 (2)
ts = TimeSeries[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4], Subscript[x, 5]}, {1}];f[3, _] := 0;
f[_, v_] := v;TimeSeriesMapThread[f, ts]["Path"]data = TimeSeries[Table[{t, {Sin[t], Cos[t]}}, {t, 0, 30, 0.1}]];ListLinePlot[data]ListLinePlot[TimeSeriesMapThread[RandomReal[{-#1 / 50, #1 / 50}] + #2&, data]]数据类型 (5)
ts = {{1, a}, {2, b}, {3, c}, {7, d}};TimeSeriesMapThread[f, ts]把 TimeSeries 中大于 3 的时间数值设为 1:
ts = TimeSeries[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4], Subscript[x, 5]}, {1}];f[a_, b_] := If[a > 3, 1, b]TimeSeriesMapThread[f, ts]["Path"]可视化整数时间的 TemporalData:
data = RandomFunction[WienerProcess[0, 7], {0, 20, .1}, 40]ListLinePlot[data, PlotStyle -> Thin]TimeSeriesMapThread[If[Mod[#1, 1] == 0., #2, 0]&, data]ListLinePlot[%]把 EventSeries 中间 50 个数值为 0:
es = TemporalData[EventSeries, {{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12,
12, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, ... 20, 20, 21, 22, 22,
23, 23, 24, 25, 26, 26, 27, 27, 28, 28, 28, 28, 29, 30, 30, 30, 31, 31, 31, 32, 32, 33, 33,
33}}, {{0, 99, 1}}, 1, {"Discrete", 1}, {"Discrete", 1}, 1,
{ResamplingMethod -> None, ValueDimensions -> 1}}, False, 10.];ListPlot[es, Filling -> Axis]TimeSeriesMapThread[If[25 < #1 < 74, 0, #2]&, es]ListPlot[%, Filling -> Axis]s = Quantity[{0, 16, 9, 3, 20, 23}, "Meters"];ts = TimeSeries[s]f[a_, b_] := If[a > 2, Quantity[1, "Meters"], b]new = TimeSeriesMapThread[f, ts]new["Path"]应用 (5)
膨胀 (1)
下列是从 1970 到 2010 的地点油价. 这个暑假不对膨胀进行校正:
oilPrices = TemporalData[TimeSeries, {{{Quantity[3.35, "USDollars"/"BarrelsOfOilEquivalent"],
Quantity[3.35, "USDollars"/"BarrelsOfOilEquivalent"],
Quantity[3.35, "USDollars"/"BarrelsOfOilEquivalent"],
Quantity[3.35, "USDollars"/"BarrelsOfOilEqu ... ilEquivalent"]}},
{TemporalData`DateSpecification[{1970, 1, 1, 0, 0, 0.}, {2010, 1, 1, 0, 0, 0.},
{{45, "Day"}, {15, "Hour"}, {41, "Minute"}, {20, "Second"}}]}, 1, {"Discrete", 1},
{"Discrete", 1}, 1, {ValueDimensions -> 1}}, True, 10.];DateListPlot[oilPrices, Joined -> True]pi = TemporalData[TimeSeries, {{{22.424, 22.747, 22.935, 23.233, 23.588, 23.905, 24.146, 24.345, 24.745,
24.894, 25.114, 25.398, 25.398, 26.145, 26.634, 27.095, 27.095, 28.266, 29.127, 30.012, 30.69,
31.138, 31.692, 32.22, 32.567, 32.893, 33.3 ... 100.179, 100.179}},
{TemporalData`DateSpecification[{1970, 1, 1, 0, 0, 0.}, {2010, 1, 1, 0, 0, 0}, {1, "Quarter"}]},
1, {"Continuous", 1}, {"Discrete", 1}, 1,
{ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1}}}, True, 314.1];DateListPlot[pi, Joined -> True]cpiCor[base_, t_, v_] := (v * base/pi[t])baseCPI = pi["December 31st, 2009"]cp = TimeSeriesMapThread[cpiCor[baseCPI, #1, #2]&, oilPrices];DateListPlot[{cp, oilPrices}, Joined -> True, PlotLegends -> {"Adjusted", "Original"}, PlotStyle -> Thick]cp["March 5th, 2001"]气候 (1)
下面是三年时间内密苏里城市的每月平均温度. 分隔数据的季节和非季节分量:
temp = TemporalData[TimeSeries, {{{22.82, 17.01, 11.85, 7.14, 0.37, -4.54, -1.58, 6.57, 12.34, 19.02,
20.95, 22.02, 19.59, 19.77, 12.38, 7.21, -0.54, -2.28, 1.12, 3.13, 12.51, 16.38, 23.54, 23.65,
23.23, 20.73, 12.63, 6.39, -3.88, 2.98, -1.07, 4.84, 13.32, 16.42, 21.69, 24.02, 22.18}},
{TemporalData`DateSpecification[{2004, 1, 1}, {2007, 1, 1}, "Month"]}, 1, {"Discrete", 1},
{"Discrete", 1}, 1, {ValueDimensions -> 1}}, True, 10.];DateListPlot[temp, Joined -> True]mod = NonlinearModelFit[temp, a Sin[(x - b/5000000)], {a, b}, x];DateListPlot[scomp = TimeSeriesMapThread[mod[#1]&, temp], Joined -> True]sCor[t_, v_] := v - scomp[t]ncomp = TimeSeriesMapThread[sCor, temp];DateListPlot[ncomp, Joined -> True]Normal[TimeSeriesThread[Total, {ncomp, scomp}]] == Normal[temp]仿真 (1)
使用 TimeSeriesMapThread 模拟转化的随机过程:
μ = 0;σ = 1 / 3;t0 = 0;t1 = 2;x0 = 0;x1 = 0;模拟 WienerProcess:
proc = WienerProcess[μ, σ];
SeedRandom[3];
data = RandomFunction[proc, {t0, t1, .1}];sample = TimeSeriesMapThread[x0(x1 - x0)(#1 - t0) / (t1 - t0) + #2 - (#1 - t0) Last[data["Values"]] / (t1 - t0) - (t1 - #1)First[data["Values"]] / (t1 - t0)&, data];与相应的 BrownianBridgeProcess 比较:
SeedRandom[3];
data = RandomFunction[BrownianBridgeProcess[σ, {t0, x0}, {t1, x1}], {t0, t1, .1}];ListLinePlot[{sample, data}, PlotStyle -> {Thick, Dotted}]GDP (1)
GDPDiscrepancy = EntityValue[Entity["Country", "Switzerland"], EntityProperty["Country", "DiscrepancyInExpenditureEstimateOfGDP", {"CurrencyUnit" -> "CurrentLCU", "Date" -> All}]]GDPDiscrepancy["FirstValue"]//QuantityUnitGDPDiscrepancyInUSDollars = TimeSeriesMapThread[InflationAdjust[Quantity[QuantityMagnitude[#2], DatedUnit["SwissFrancs", First@DateList[#1]]], DatedUnit["USDollars", First@DateList[#1]]]&, GDPDiscrepancy]DateListPlot[GDPDiscrepancyInUSDollars]月相 (1)
dates = DateRange[DateObject[{2014, 1, 1, 12}], DateObject[{2014, 1, 31, 12}], 1];mp = MoonPhase[dates, "Icon"];
sf = MoonPhase[dates, "Fraction"];phases = TimeSeriesMapThread[Framed[Labeled[ImageResize[#2, 45], Style[DateString[#1, {"DayNameShort", " ", "DayShort"}]]], Background -> Lighter[ColorData["StarryNightColors", #3], .3]]&, mp, {sf["Values"]}];Labeled[Grid[Partition[phases["Values"], 7, 7, 4, ""], Dividers -> All, Spacings -> {0, 0}], "January 2014", Top]属性和关系 (3)
取一个简单的时间序列,并通过映射函数 f 来构建另一个序列:
ts = TimeSeries[{11, 17, 13}]res1 = TimeSeriesMapThread[f, ts]也可以通过转换为 Tabular,然后应用 ConstructColumns,再转换回来获得同样的结果:
ConstructColumns[Tabular[ts], "s" -> Function[f[#Timestamp, #Value]]]res2 = TimeSeries[%[All, "s"], {ts["Times"]}]res1 === res2ts = TimeSeries[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4], Subscript[x, 5]}, {1}]res = TimeSeriesMapThread[f, ts]TimeSeriesMap[f, ts]//NormalNormal[res]使用 TransformColumns 也可以得到相同的结果:
res === TransformColumns[ts, "Value" -> (f[#Timestamp, #Value]&)]TimeSeriesMapThread[Function[f[#2]],ts] 等价于 TimeSeriesMap[f,ts]:
ts = TimeSeries[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4], Subscript[x, 5]}, {1}]res = TimeSeriesMapThread[f[#2]&, ts]Normal[res]res === TimeSeriesMap[f, ts]文本
Wolfram Research (2014),TimeSeriesMapThread,Wolfram 语言函数,https://reference.wolfram.com/language/ref/TimeSeriesMapThread.html (更新于 2026 年).
CMS
Wolfram 语言. 2014. "TimeSeriesMapThread." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2026. https://reference.wolfram.com/language/ref/TimeSeriesMapThread.html.
APA
Wolfram 语言. (2014). TimeSeriesMapThread. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/TimeSeriesMapThread.html 年
BibTeX
@misc{reference.wolfram_2026_timeseriesmapthread, author="Wolfram Research", title="{TimeSeriesMapThread}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/TimeSeriesMapThread.html}", note=[Accessed: 28-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_timeseriesmapthread, organization={Wolfram Research}, title={TimeSeriesMapThread}, year={2026}, url={https://reference.wolfram.com/language/ref/TimeSeriesMapThread.html}, note=[Accessed: 28-October-2026]}