1

Ich habe eine Anzahl von Listen, wobei jedes Element eine Firma repräsentiert.Wie man verschiedene Gleichungen auf Elemente in einer Liste basierend auf if-Anweisungen in Mathematica anwendet

Zum Beispiel:

b = {1, 2, 3, 4, 5} 
c = {3, 4, 6, 8, 9} 

bedeutet Company 1 b = 1, c = 3 und Company 2 hat b = 2, c = 4 usw.

Ich versuche, eine Reihe von bedingten zu codieren Anweisungen ohne Verwendung von Schleifen.

Zum Beispiel, wenn Firma 'x' z> 0 hat, dann möchte ich, dass a, d, g auf die eine Weise aktualisiert wird, und wenn z < 0 ich möchte, a, d, g auf eine andere Weise .

Ich habe versucht, den Befehl If, aber es scheint nicht für Listen mit mehreren Elementen zu arbeiten.

If [z > 0, 
a = b + c; 
d = e - f; 
g = h - i - j; 
, 
a = n - o; 
d = p - q; 
g = w + y] 

Ich habe mit dem MapThread-Befehl experimentiert, aber kann nur scheinen, um es für eine Zeile Code zu arbeiten. Zum Beispiel für a:

a = MapThread[If[#1 > 0, #2 + #3 , #4 - #5] &, {z, b, c, n, o}] 

aber dies wird umständlich, wenn ich dies für jede einzelne Zeile zu schreiben.

Gibt es eine einfache Möglichkeit, dies zu implementieren, ohne Schleifen zu verwenden?

+0

brauchen ein vollständigeres Beispiel für die Eingabe und erwartete Ausgabe, und besser auf mathematica.stackexchange.com gefragt – agentp

Antwort

0

Ein paar Beispiele.

a = d = g = ConstantArray[Null, 5]; 
b = {1, 2, 3, 4, 5}; 
c = {3, 4, 6, 8, 9}; 
e = {8, 4, 0, 4, 4}; 
f = {4, 9, 6, 5, 4}; 
h = {5, 8, 8, 7, 1}; 
i = {3, 3, 4, 4, 5}; 
j = {2, 6, 3, 4, 1}; 
n = {7, 3, 1, 8, 8}; 
o = {7, 8, 8, 4, 3}; 
p = {8, 3, 8, 9, 4}; 
q = {6, 5, 1, 6, 2}; 
w = {9, 5, 7, 7, 4}; 
y = {6, 5, 8, 9, 2}; 
z = {6, 2, 1, 3, 0}; 

Array[ 
    If[z[[#]] > 0, 
    a[[#]] = b[[#]] + c[[#]]; 
    d[[#]] = e[[#]] - f[[#]]; 
    g[[#]] = h[[#]] - i[[#]] - j[[#]]; 
    , 
    a[[#]] = n[[#]] - o[[#]]; 
    d[[#]] = p[[#]] - q[[#]]; 
    g[[#]] = w[[#]] + y[[#]]] &, Length[z]]; 

{a, d, g} 

{{4, 6, 9, 12, 5}, {4, -5, -6, -1, 2}, {0, -1, 1, -1, 6} }

Verwenden MapThread mit lokalen Funktionsnamen für Klarheit.

{a, d, g} = [email protected][Function[ 
    {b, c, e, f, h, i, j, n, o, p, q, w, y, z}, 
    If[z > 0, {b + c, e - f, h - i - j}, {n - o, p - q, w + y}]], 
    {b, c, e, f, h, i, j, n, o, p, q, w, y, z}] 

{{4, 6, 9, 12, 5}, {4, -5, -6, -1, 2}, {0, -1, 1, -1, 6} }

mit ReplaceAll mit von RuleDelayed lokalisierten Namen.

{a, d, g} = Transpose[ 
    [email protected]{b, c, e, f, h, i, j, n, o, p, q, w, y, z} /. 
    {b_, c_, e_, f_, h_, i_, j_, n_, o_, p_, q_, w_, y_, z_} :> 
    If[z > 0, {b + c, e - f, h - i - j}, {n - o, p - q, w + y}]] 

{{4, 6, 9, 12, 5}, {4, -5, -6, -1, 2}, {0, -1, 1, -1, 6} }

Verwandte Themen