2017-10-16 7 views
2

私は、3つの数字の列を入力するだけの機能を記述する必要があります。数字の列を出力します。したがって、各行で計算して最終的に1つの行番号を得ることができます。たとえば、X = 1 2 3、Y = 2 3 4、Z = 0 1 2、calculate(xz)/(yz)なので、出力は0.5 0.5 0.5Jの3つの列の関数を書く方法は?

答えて

2

あなたは数学の表記がJに変換する場合、それはあなたは、数字の代わりに、行の列を望んでいたので、私たちはただの列に行を変更しますもう一度読んで(もむしろ=より割り当てとして=:を使用)

X=: 1 2 3 
    Y=: 2 3 4 
    Z=: 0 1 2 
    (X-Z)%(Y-Z) NB. doesn't need second parenthesis pair (X-Z)%Y-Z also works 
0.5 0.5 0.5 

を解決することができますモナドー,.「ラヴェルアイテム」を使用して各アイテムを取り出し、それを1行にします。この場合、各項目はアトムであり、行は列になり、結果は列になります。

ex=: ,.X 
    why=: ,. Y 
    zed=: ,. Z 
    ex 
1 
2 
3 
    why 
2 
3 
4 
    zed 
0 
1 
2 
    (ex-zed)%why-zed 
0.5 
0.5 
0.5 
0

これはyour other questionに関連している場合は、任意の形状を渡す引数をボックスまたは図形ことができます。

f =: 3 : 0                                     
'x y z' =. y 
(x-z)%(y-z)                                     
) 

f 1 2 3 
2  
f (1 2 3);(2 3 4);(0 1 2) 
0.5 0.5 0.5 

f (2 3 $ 5 4);(2 3$ 6 4 2);(2 3$ 7 5) 
2  1  0.4 
_1 0.666667 0.333333 


f i.3 2 4 3 NB. Input shape (3 a b c...), output shape a b c... 
2 2 2 
2 2 2 
2 2 2 
2 2 2 

2 2 2 
2 2 2 
2 2 2 
2 2 2