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
,因为它进行元素乘法。