我有一个函数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.
谢谢!
答案 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}} *)