1

各要素が会社を表す数多くのリストがあります。例えばMathematicaのif文に基づいて、リスト内の要素に異なる方程式を適用する方法

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

当社1、B = 1、C = 3を有しており、当社2私は条件のシリーズをコード化しようとしているB = 2、C = 4など

を有していますループを使用しないステートメント。

たとえば、Company 'x'にz> 0がある場合、a、d、gを一方向に更新したい場合は、< 0を別の方法でa、d、gを更新したい場合。

Ifコマンドを使用しようとしましたが、複数の要素を持つリストでは機能しないようです。

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

私はMapThreadコマンドを試しましたが、1行のコードでしか動作しないようです。 など。 aのために:

私はこれを別々の行ごとに書く必要があります。

ループを使用せずにこれを実装する簡単な方法はありますか?

+0

は、より完全な入力と期待される出力の例を必要とし、mathematica.stackexchange.comでよりよく尋ねられます。 – agentp

答えて

0

いくつかの例です。

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} }

MapThreadには、わかりやすくするためにローカル関数名を使用しています。

{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} }

によってローカライズされた名前のReplaceAllを使用します。

{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} }

関連する問題