2

我有一个功能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 的列表。我应该怎么做才能做到这一点?它会比地图更快吗?

为了让自己更清楚,说

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.

谢谢!

4

2 回答 2

1

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

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

当 Total 采用列表参数时,它只添加成员,在您的情况下,它添加

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

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

在这种情况下,应该使用地图。

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

或者

    Plus @@@ {{a1, b1, c1}, {b1, b2, b3}, {c1, c2, c3, c4}}
于 2013-06-21T09:33:37.130 回答
0

抱歉 Listable 在这里没有做这项工作..如果有帮助,您可以将 map 放入函数中..

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}} *)
于 2013-06-21T17:38:40.650 回答