The message from these good solutions is that you need to train yourself to recognize that (bitmask + operand) does what you wanted.

Henry Rich

On 8/16/2020 5:00 PM, 'Pascal Jasmin' via Programming wrote:
Roger's solution includes an intermediate-advanced J concept I knew about, and 
an advanced realization I did not previously realize/know about.

first, if you bind a verb (&) you normally make the result monadic.  If you 
call that verb dyadically, then result is:

(m&f)^:(x)  y

m&(] operand) gives the result of just monadic operand.

The advanced realization is that compared to operator^:bitmask, you can evaluate the 
(^:n) "with rank" or for each n element.

An alternate solution that doesn't use the "advanced &" feature is:

bitmask  operator@]^:["0 operand

    0 1 0 1 >:@]^:[("0) 2 2 2 2

2 3 2 3


Another alternative that could work dyadically or with alternate verbs in J902,

(]`>: {~ 0 1 0 1)("0) 2 2 2 2

2 3 2 3

1 2 1 2 (-~`+ {~ 0 1 0 1)("0 0) 2 2 2 2

1 4 1 4






On Sunday, August 16, 2020, 04:12:05 p.m. EDT, Raoul Schorer 
<raoul.scho...@gmail.com> wrote:





Thanks, works perfectly! Now I'll have a good think and try to understand
how this works ;-)

On Sun, Aug 16, 2020 at 10:02 PM Roger Hui <rogerhui.can...@gmail.com>
wrote:

If "operator" is >: there is a very easy solution:

     desired_result -: operand + bitmask
1

For a general monadic function, you can do as follows:

     desired_result -: bitmask 0&(] operator)"0 operand
1

The basic idea is what the power operator does; m&v or v&m allows you to do
the same when the bitmask is an array and not a scalar.




On Sun, Aug 16, 2020 at 12:45 PM Raoul Schorer <raoul.scho...@gmail.com>
wrote:

Hi,

This seems pretty trivial, but I'm stuck on how to perform conditional
application of a verb on a multidimensional array as defined by a bitmask
of the same shape as the operand array. Is there a typical idiom for
that?
For example,

operand =. 2 2 2 $ 3 2 2 3 2 3 3 2

bitmask =. 2 2 2 $ 1 0 0 1 0 1 1 0

operator =. >:

desired_result =. 2 2 2 $ 4 2 2 4 2 4 4 2


I tried looking at the doc, but I wasn't able to formulate a nice
solution.

Thanks!

Raoul
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm


--
This email has been checked for viruses by AVG.
https://www.avg.com

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to