2017-10-16 70 views
2

我需要寫一個函數,我只需要輸入三個數字的列,它會出一列數字。所以他們可以在每一行計算並最終得到一個行號。例如,X = 1 2 3,Y = 2 3 4,Z = 0 1 2,計算(xz)/(yz),所以輸出是0.5 0.5 0.5如何在J中編寫三列數字的函數?

回答

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 

重讀你想要的數字,而不是行的列,所以我們只能改變行列使用monadic ,.「拉威爾項目」採取每個項目,並使其成爲一排。在這種情況下,每個項目是一個原子,行被製成列,結果是一列。

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