一對列表的元素的產品列表中是否有將採取兩個列表預罐裝操作,說如何從Mathematica中
a = { 1, 2, 3 }
b = { 2, 4, 8 }
而產生的,而無需使用一個for循環,一個新的其中每對列表中的相應的元素都被乘以
{ a[1] b[1], a[2] b[2], a[3] b[3] }
我想有可能列表存在像內部[時代,A,b,再加上],但返回一個列表,而不是總和。
一對列表的元素的產品列表中是否有將採取兩個列表預罐裝操作,說如何從Mathematica中
a = { 1, 2, 3 }
b = { 2, 4, 8 }
而產生的,而無需使用一個for循環,一個新的其中每對列表中的相應的元素都被乘以
{ a[1] b[1], a[2] b[2], a[3] b[3] }
我想有可能列表存在像內部[時代,A,b,再加上],但返回一個列表,而不是總和。
a = {1, 2, 3}
b = {2, 4, 8}
Thread[Times[a, b]]
或者,由於Times[]
線程逐個元件在列表,簡單地說:
a b
請注意,這兩個解決方案的效率是不一樣的:
i = RandomInteger[ 10, {5 10^7} ];
{First[ Timing [i i]], First[ Timing[ Thread[ Times [i,i]]]]}
(*
-> {0.422, 1.235}
*)
編輯
的行爲是由於Listable
屬性。看看這個:
SetAttributes[f,Listable];
f[{1,2,3},{3,4,5}]
(*
-> {f[1,3],f[2,4],f[3,5]}
*)
您可以通過使用List
作爲最後一個參數做到這一點使用Inner
:
In[5]:= Inner[Times, a, b, List]
Out[5]= {2, 8, 24}
但別人已經提到,Times
自動工作。在一般的東西像Inner
,這是與「虛擬」功能測試的事情經常有用看到結構是什麼:
In[7]:= Inner[f, a, b, g]
Out[7]= g[f[1, 2], f[2, 4], f[3, 8]]
,然後從向後工作,以確定實際的作用應該是得到所需要的是什麼結果。
+1,尤其是對於使用虛擬函數的建議。 – rcollyer
另外'a * b',因爲它確實按照元素進行了乘法運算。 – Nayuki
@Nayuki它已經在那裏 –