2016-07-19 12 views
1

Ich habe zwei Arrays x.dim = (N,4) und y.dim = (M, M, 2) und eine Funktion f(a, b), die K und L dimensionale Vektoren jeweils als Argument annimmt. Ich möchte ein Array res.dim = (N, M, M) so dassVektorisieren drei verschachtelte Schleifen - NumPy

for n in range(N): 
    for i in range(M): 
    for j in range(M): 
     res[n, i, j] = f(x[n], y[i, j]) 

bekommen kann nicht erhalten, wie apply in diesem Fall zu verwenden. Vielen Dank im Voraus für Hilfe!

def f(a, b): 
    return max(0, 1 - np.sum(np.square(np.divide(np.subtract(b, a[0:2]), a[2:4])))) 
+0

dies nicht funktionieren kann, 'i, j in Bereich (N)'? int-Objekt ist nicht iterierbar? angenommen, Bereich (N) ist Liste von Ints von 0 bis N-1 –

+0

Na dann schreibst du es, wie es in der Praxis ist :) –

Antwort

1

Hier ist ein vektorisiert Ansatz mit der aufgeführten Funktion NumPy broadcasting und Schneiden mit zu arbeiten -

# Slice out relevant cols from x 
x_slice1 = x[:,None,None,:2] 
x_slice2 = x[:,None,None,2:4] 

# Perform operations using those slices to correspond to iterative operations 
out = np.maximum(0,1-(np.divide(y-x_slice1,x_slice2)**2).sum(3)) 
Verwandte Themen