2014-11-22 33 views
-1

如何在list(矢量)上執行Python成員操作,例如在Matlab/Octave中。我的意思是,讓兩個列表:Python中的成員運算符

a = [1,2,3] 
b = [4,5,6] 

是否有按成員運營商,如:

c = a .* b = [1*4,2*5,3*6] 
d = a ./ b = [1/4,2/5,3/6] 

我知道,我可以自己實現它,我會做,如果沒有這樣的模塊。一個不完全防彈的方式可以是:

# Memberwise product: 
def mwprod(a,b): 
    c = [] 
    if len(a) == len(b): 
     for a,b in zip(a,b): 
      try: 
       c.append(a*b) 
      except: 
       c.append(NaN) 
    return c 

如前所述通過user3426575這可以在一個非常Python化的方式來凝聚:

c = [ x*y for x, y in zip(a,b) ] 

反正我想知道的東西更密集和審美其過載或實現這些運營商在list

+1

您正在尋找[NumPy的(http://www.numpy.org /)。 – 2014-11-22 10:19:51

+1

這樣做的一種非常「pythonic」的方式是使用列表理解: 'c = [x * y for x,y in zip(a,b)]' – user3426575 2014-11-22 21:59:48

回答

2

這可以用numpy的來完成:

>>> import numpy as np 
>>> a = np.array([1,2,3],float) # float argument is used so that/operator does float division rather than integer division 
>>> b = np.array([4,5,6],float) 
>>> a*b 
array([ 4., 10., 18.]) 
>>> a/b 
array([ 0.25, 0.4 , 0.5 ]) 
+0

感謝這個基於模塊的答案。 – jlandercy 2014-11-22 10:52:12

2

你可以嘗試這樣的,

>>> [ item * b[k] for k,item in enumerate(a)] 
[4, 10, 18] 
>>> [ item/b[k] for k,item in enumerate(a)] 
[0.25, 0.4, 0.5] 
+0

Thanks for this python-only based answer。 – jlandercy 2014-11-22 10:55:06

+0

歡迎@jlandercy – 2014-11-22 10:56:29

+0

這實在是一個奇怪而不正確的方法。這是不必要的'O(N ** 2)',如果列表包含重複的項目,則失敗。 – 2014-11-22 11:08:45