Wie generalisiert man äußere zu n Dimensionen?

8

Der Standard-R-Ausdruck outer(X, Y, f) ergibt eine Matrix, deren (i, j) -ter Eintrag den Wert f(X[i], Y[j]) hat.

Ich möchte die Funktion multi.outer implementieren, eine n-dimensionale Verallgemeinerung von outer : multi.outer(f, X_1, ..., X_n) , wobei f eine n-ary Funktion ist, würde a (Länge (X_1) * ... * Länge (X_n)) Array, dessen (i_1, ..., i_n) -ter Eintrag den Wert f(X_1[i_1], ..., X_n[i_n]) für alle gültigen Indexmengen (i_1, ..., i_n) hat. Natürlich müssen für jedes i in {1, ..., n} alle Elemente von X_i in multi.outer(f, X_1,...,X_i,..., X_n) zulässige i-te Argumente für die Funktion f sein. Für den Fall n = 2 würde multi.outer dasselbe tun wie outer , obwohl es eine andere Signatur hätte (IOW, multi.outer(f, X, Y) wäre äquivalent zu outer(X, Y, f) ).

Es ist wichtig zu beachten, dass, obwohl die Argumente X_1, ..., X_n von multi.outer alle Vektoren sind, sie nicht notwendigerweise alle denselben Modus haben. Z.B. X_1 und X_2 könnten c(1, 2, 3) bzw. LETTERS[10:20] sein.

Danke!

    
kjo 31.05.2011, 19:58
quelle

3 Antworten

16

Dies ist eine Möglichkeit: Verwenden Sie zuerst Vectorize und outer , um eine Funktion zu definieren, die eine n-dimensionale Matrix erstellt, in der jeder Eintrag eine Liste von Argumenten enthält, auf die die angegebene Funktion angewendet wird:

%Vor%

Jetzt muss multi.outer nur apply und do.call auf dieser "args-matrix" aufrufen:

%Vor%

Versuchen wir das mit einer Beispielfunktion:

%Vor%     
Prasad Chalasani 31.05.2011, 21:34
quelle
1

Wie wäre es damit:

%Vor%     
frankc 31.05.2011 21:27
quelle
0

Ich denke, wir können das mit Outer und Vectorize machen.

%Vor%

Jetzt gibt sigm1 (x = 1: 3) die gewünschte Ausgabe

%Vor%

Der einzige Nachteil bei diesem Code-Snippet ist, dass ich die Standardwerte von a = -1: 1 und b = -1: 1 verwende. Wenn ich versuche, während des Funktionsaufrufs dasselbe zu tun, geht es drunter und drüber. ZB

%Vor%

Ich bin nicht imstande herauszufinden, warum die Übergabe der Argumente diesen Unterschied in der Ausgabe macht.

    
kasa 11.08.2017 17:28
quelle

Tags und Links