Verwenden Sie numpy, um ein Array aller Kombinationen von zwei Arrays zu erstellen

Ich versuche, den Parameterraum einer 6-Parameter-Funktion zu durchlaufen, um ihr numerisches Verhalten zu untersuchen, bevor ich versuche, irgendetwas Komplexes damit zu machen, also suche ich nach einem effizienten Weg, dies zu tun.

Meine Funktion verwendet Float-Werte bei einem 6-Dim-Numpy-Array als Eingabe. Was ich anfangs versucht habe, war Folgendes:

Zuerst habe ich eine Funktion erstellt, die 2 Arrays verwendet und ein Array mit allen Wertekombinationen aus den beiden Arrays generiert

from numpy import *
def comb(a,b):
    c = []
    for i in a:
        for j in b:
            c.append(r_[i,j])
    return c

Dann habe ich benutztreduce() Um dies auf m Kopien desselben Arrays anzuwenden:

def combs(a,m):
    return reduce(comb,[a]*m)

Und dann bewerte ich meine Funktion so:

values = combs(np.arange(0,1,0.1),6)
for val in values:
    print F(val)

Das funktioniert, aber es ist zu langsam. Ich weiß, der Parameterraum ist riesig, aber das sollte nicht so langsam sein. Ich habe nur 10 abgetastet6 (eine Million) Punkte in diesem Beispiel und es dauerte mehr als 15 Sekunden, um das Array zu erstellenvalues.

Kennen Sie eine effizientere Möglichkeit, dies mit Numpy zu tun?

Ich kann übrigens die Funktion ändernF nimmt seine Argumente, wenn es notwendig ist.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage