Wolfram mathematica 如何从mathematica中一对列表的元素生成产品列表

Wolfram mathematica 如何从mathematica中一对列表的元素生成产品列表,wolfram-mathematica,Wolfram Mathematica,比如说,是否有一个预罐装的操作需要两份清单 a = { 1, 2, 3 } b = { 2, 4, 8 } 并在不使用for循环的情况下生成一个新列表,其中每对列表中的对应元素已相乘 { a[1] b[1], a[2] b[2], a[3] b[3] } 我想可能存在类似于内部[时间,a,b,Plus]的东西,但返回的是列表而不是总和 a = {1, 2, 3} b = {2, 4, 8} Thread[Times[a, b]] 或者,由于Times[]threads元素优于列表,只需:

比如说,是否有一个预罐装的操作需要两份清单

a = { 1, 2, 3 }
b = { 2, 4, 8 }
并在不使用for循环的情况下生成一个新列表,其中每对列表中的对应元素已相乘

{ a[1] b[1], a[2] b[2], a[3] b[3] }
我想可能存在类似于内部[时间,a,b,Plus]的东西,但返回的是列表而不是总和

a = {1, 2, 3}
b = {2, 4, 8}

Thread[Times[a, b]]
或者,由于
Times[]
threads元素优于列表,只需:

a b
请注意,两种解决方案的效率不同:

i = RandomInteger[ 10, {5 10^7} ];
{First[ Timing [i i]], First[ Timing[ Thread[ Times [i,i]]]]}

(*
-> {0.422, 1.235}
*)
编辑

Times[]
的行为是由于
Listable
属性造成的。看看这个:

SetAttributes[f,Listable];
f[{1,2,3},{3,4,5}]
(*
-> {f[1,3],f[2,4],f[3,5]}
*)

您可以使用
internal
通过使用
List
作为最后一个参数来执行此操作:

In[5]:= Inner[Times, a, b, List]

Out[5]= {2, 8, 24}
但是,正如其他人已经提到的,
时间
是自动工作的。一般来说,对于
内部
,使用“虚拟”函数测试内容以查看结构是什么通常很有用:

In[7]:= Inner[f, a, b, g]

Out[7]= g[f[1, 2], f[2, 4], f[3, 8]]

然后从这一点开始反向工作,以确定实际函数应该是什么,从而得到所需的结果。

也可以是
a*b
,因为它进行元素乘法。