Mathematica:将函数应用于列表列表

时间:2013-06-21 04:09:34

标签: list function map wolfram-mathematica

我有一个函数f[d_]。我的目的是将此函数应用于整个列表。 说,d={1,2,3,...},然后f[d]给我一个结果(一个数字或其他)。在此之前,一切都很清楚。

现在假设我有以下列表列表:p={l1,l2,l3,...} 是否有比Map更有效的方式来计算f[p],其中预期结果为{f[l1],f[l2],f[l3],...}

例如,使用Sin[x]函数,将其映射到列表上的速度要慢于将列表放在其参数中。这似乎不适用于我的函数f[d]和列表列表p。我应该怎么做才能做到这一点?它会比Map快吗?

为了让自己更清楚,请说

f[d_]:=Total[d]
Then, f[{a1,a2,a3}] gives me a1+a2+a3, as expected.
But, f[{{a1, a2, a3}, {b1, b2, b3}, {c1, c2, c3, c4}}] kills the machine.

谢谢!

2 个答案:

答案 0 :(得分:1)

当我更改你的代码时,它会给出:

     Total[{{a1, b1, c1}, {b1, b2, b3}, {c1, c2, c3}}]
     {a1 + b1 + c1, b1 + b2 + c2, b3 + c1 + c3}

当Total获取一个list参数时,它只是添加成员,在你的情况下,它添加

    {a1, b1, c1},{b1, b2, b3}, {c1, c2, c3}

但它们不是同一个维度,所以你无法得到正确答案。

在这种情况下,应使用Map。

    Map[Total,{{a1, b1, c1}, {b1, b2, b3}, {c1, c2, c3, c4}}]

    Plus @@@ {{a1, b1, c1}, {b1, b2, b3}, {c1, c2, c3, c4}}

答案 1 :(得分:0)

抱歉Listable并不在这里工作.. 如果有帮助,你可以将地图放在函数内..

ClearAll[f]
f[d_List] := Map[ Total, d, {-2}]
f[{1, 2, 3}]
f[{{1, 2, 3}, {4, 5}}]
f[{{{1, 2, 3}, {4, 5}}, {{6}, {7, 8}}}]

(* 6 *)
(* {6, 9} *)
(* {{6, 9}, {6, 15}} *)