Pee*_*oot 3 wolfram-mathematica
比方说,是否有一个预制的操作需要两个列表
a = { 1, 2, 3 }
b = { 2, 4, 8 }
Run Code Online (Sandbox Code Playgroud)
并且在不使用for循环的情况下生成新列表,其中每对列表中的对应元素已被乘以
{ a[1] b[1], a[2] b[2], a[3] b[3] }
Run Code Online (Sandbox Code Playgroud)
我在想可能存在像Inner [Times,a,b,Plus]这样的东西,但是返回一个列表而不是一个总和.
Dr.*_*ius 10
a = {1, 2, 3}
b = {2, 4, 8}
Thread[Times[a, b]]
Run Code Online (Sandbox Code Playgroud)
或者,因为Times[]线程元素在列表上,简单地说:
a b
Run Code Online (Sandbox Code Playgroud)
请注意两种解决方案的效率不一样:
i = RandomInteger[ 10, {5 10^7} ];
{First[ Timing [i i]], First[ Timing[ Thread[ Times [i,i]]]]}
(*
-> {0.422, 1.235}
*)
Run Code Online (Sandbox Code Playgroud)
编辑
行为Times[]是由Listable属性引起的.看这个:
SetAttributes[f,Listable];
f[{1,2,3},{3,4,5}]
(*
-> {f[1,3],f[2,4],f[3,5]}
*)
Run Code Online (Sandbox Code Playgroud)
你可以Inner使用Listas作为最后一个参数:
In[5]:= Inner[Times, a, b, List]
Out[5]= {2, 8, 24}
Run Code Online (Sandbox Code Playgroud)
但正如其他人已经提到的那样,Times自动运作 通常对于类似Inner的东西,使用"虚拟"函数测试事物通常很有用,以查看结构是什么:
In[7]:= Inner[f, a, b, g]
Out[7]= g[f[1, 2], f[2, 4], f[3, 8]]
Run Code Online (Sandbox Code Playgroud)
然后从那里开始工作,以确定实际功能应该是什么,以给出期望的结果.
| 归档时间: |
|
| 查看次数: |
2987 次 |
| 最近记录: |