2016-04-12 25 views
0

iki numpy dizilerPython hızlı bir şekilde

a = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
b = np.array([2,7,6]) 

olması demek ve ben değeri ile 0 tüm öğeleri yerine istediğiniz olduğu

c = np.array([[1,0,3],[4,5,0][0,8,9]]) 

elde etmek isteyen değeri b dizisinde bulunan a dizisinde. Bunu yapmanın en hızlı ve en temiz yolu?

+1

Ne denediniz? .. –

+0

Denemedim. Aklımda ortaya çıkan tek yol döngüdür. Bunu yapmak için vectorized bir yol olup olmadığını merak ediyorum. np.select', np.choice', np.place' ... bildiğim kadarıyla koşullu ya da maskeye dayanıyor. – fmonegaglia

cevap

2

Alternatif cevap (substitute(a,b,0) gibi bir şey var mı):

c = a.copy() 
c[np.in1d(a.ravel(), b).reshape(a.shape)] = 0 

np.in1d operatörü "nde" bir vektörleşen versiyonu gibi bir türüdür, ancak yalnızca 1D diziler için çalışır. (Bu nedenle, ravel ve yeniden şekillendirme işlemleri.)

1
c = a.copy() 
for num in b: 
    c[c == num] = 0 
+0

'c [c == num]' hapsetmek için güzel bir yol .... – Netwave

+2

Bu nasıl sinir bozucu? 'Num' değerine eşit olan 'c' değerleri sıfıra ayarlanmalıdır; burada 'num', 'b' içindeki her bir değeri alır. – acdr

+0

@DanielSanchez numpy dizileri [boole indeksleme] gibi zengin indekslemeyi destekler (http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#boolean-array-indexing). Bu deyimsel bir kalıptır. –

İlgili konular