0

1. 我的主要问题

我有一个带有两个参数槽的函数。我不想将此功能应用于 2 个不同长度的列表。我认为在这个解决方案中:

Map[Map[f[# &, #], b] &, c]

但它不起作用。这是为什么?

例子

f[x_, y_] := Sin[x y]


  b = {1, 2}
  c = {1, 2, 3}

输出似乎与我想要的非常接近,但还不够接近:

{{Sin[#1 &][1], Sin[#1 &][2]}, {Sin[2 (#1 &)][1], 
  Sin[2 (#1 &)][2]}, {Sin[3 (#1 &)][1], Sin[3 (#1 &)][2]}}

2.看来我只需要把方括号中的 & 去掉即可。

a)是这样吗?为什么?

b)我该怎么做?

谢谢

4

2 回答 2

0

您可以使用Outer如下:

Outer[Sin[#1 #2] &, {1, 2}, {1, 2, 3}]
(* {{Sin[1], Sin[2], Sin[3]}, {Sin[2], Sin[4], Sin[6]}} *)
于 2013-04-12T21:55:42.837 回答
0

您可以使用两个 arg 形式的函数来命名参数之一。

Map[Map[Function[ci,f[ci, #]], b] &, c]

Outer 非常适合这个例子,但命名的纯函数参数对于更一般的情况很有用。即使不是绝对必要,它们通常也有助于提高可读性。

于 2013-04-13T12:49:01.280 回答