Can anybody provide some guidance on the following?
fns=: ((-~ +/)"1)`((*~ +/)"1)`((+~ +/)"1)`((%~ +/)"1)
rnge=. >: i. 5
]data=. (i.5 3);(i.5 2);(i.5 4);(i.5 3)
+--------+---+-----------+--------+
| 0 1 2|0 1| 0 1 2 3| 0 1 2|
| 3 4 5|2 3| 4 5 6 7| 3 4 5|
| 6 7 8|4 5| 8 9 10 11| 6 7 8|
| 9 10 11|6 7|12 13 14 15| 9 10 11|
|12 13 14|8 9|16 17 18 19|12 13 14|
+--------+---+-----------+--------+
Given the gerund "fns" (4 dyadic verbs) and the noun "data" (4 arrays which are
the desired arguments for the corresponding verbs in the gerund), how can I
apply the verbs to their respective arguments such that:
rnge applyVerbs data
+-------------------+--------------+--------------+--------------+
| 3 1.5 1 0.75 0.6| 7 8 9 10 11| 1 2 3 4 5| 2 1 0 _1 _2|
|12 6 4 3 2.4|23 24 25 26 27| 5 10 15 20 25|11 10 9 8 7|
|21 10.5 7 5.25 4.2|39 40 41 42 43| 9 18 27 36 45|20 19 18 17 16|
|30 15 10 7.5 6|55 56 57 58 59|13 26 39 52 65|29 28 27 26 25|
|39 19.5 13 9.75 7.8|71 72 73 74 75|17 34 51 68 85|38 37 36 35 34|
+-------------------+--------------+--------------+--------------+
Here is a looping explicit solution, but I feel like should be a simpler/better
way?
applyVerbs=: 3 : 0
(>: i. 4) applyVerbs y
:
res=. ''
for_mod. y do.
res=. res ;~ x [email protected]_index >mod
end.
}:res
)
For those interested in the actual problem - the verbs are different models
that are being compared. Different models have different numbers of inputs (the
columns of arrays in data) and the rows of the arrays in data are different
suggested input combinations. I'm going to multiplot the result. Eg:
require 'plot'
pd 'reset'
pd 'multi 2 2 , 2 2'
pd (<'type line;'),.rnge makeFuncData data
pd 'show'
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm