For a while I listed it as Deprecated because it is largely superseded by m}, and I mistakenly thought it was unnecessarily slow.  That's why it's relegated to a footnote.

Henry Rich

On 2/6/2022 5:18 PM, 'Pascal Jasmin' via Programming wrote:
scouring until the footnotes, I found 
https://code.jsoftware.com/wiki/Vocabulary/curlyrtu#dyadic

new to me.  actually just found it in "oldvoc" too  
https://www.jsoftware.com/help/dictionary/d530v.htm


replacing all 1s with maximum value in matrix

(>./@:, (I.@:(1&=)@,@])} ]) i.10 10




On Sunday, February 6, 2022, 04:59:06 p.m. EST, Henry Rich 
<[email protected]> wrote:





No, they're very old and little used.  See the last paragraphs in
https://code.jsoftware.com/wiki/Vocabulary/curlyrt#Details .

Henry Rich

On 2/6/2022 4:49 PM, 'Pascal Jasmin' via Programming wrote:
these u} forms are new and never showed up in release notes or nuvoc.

it is not identical to  [`u`]}




On Sunday, February 6, 2022, 03:15:08 p.m. EST, Henry Rich 
<[email protected]> wrote:





Another way to replace the second column with 0:

mat =. 0 (<a:;1)} mat

monad m} is seldom a good solution.  I suggest

mat =. 10 (I.@:(1&=)@,@])} mat  NB. replace 1 values with 10

mat =. _ (I.@:(0 = 5 | ,@]))} mat  NB. replace multiples of 5 with _

for these unusual cases.


Operations on rows/columns do not have a special notation.  You must
extract the row/col, operate on it, and replace it.  Use v0`v1`v2} to
combine these actions:

mat =. 1 (+ {."1)`((<a:;0)"_)`]} mat  NB. add 1 to col 0, replace in col 0

mat =. 1 (+ 3&{)`(3:)`]}  NB. add 1 to row 3

For more complex stuff you need the details of (x m} y) in NuVoc. For
scatter read where i is a table, each row of which is an index list of a
desired cell, use

i (<"1@[ { ]) mat

For scatter modify, use

newvalues i} mat  NB. where i has rank > 1, giving the index list of
each cell to be modified.

Henry Rich


On 2/6/2022 2:24 PM, Andrew P wrote:
I am trying to learn how to manipulate tables of numbers in J coming from a
NumPy/Python background. Assuming *mat* is a 10x10 matrix, that's what I
have figured out so far:

- Replace values equal to 1 with 10
(mat e. 1) } mat ,: 10
- Replace all non-multiples of 5 with _
(-. 0 = mat |~ 5) } mat ,: _
- Multiply each column by its index
mat (*" 1) i. 10
- Multiply each row by its index
mat (*" 0) i. 10
- Replace the second column with 0
0 (1) }"1 mat
- Replace the second column with 0 (another way)
0 (< (i.10); 1 ) } mat
- Take the diagonal of the matrix
(<0 1)&|: mat

Now, there are some tasks that I can do in NumPy but haven't found how to
do in J. For instance:
- Add 1 to each value in the first column
x[:,1] += 1
- Add 1 to each value in the third row
x[3,:] += 1

In each of those cases, I am selecting the cells by their indexes rather
than their values, and am using the existing values to generate the new
ones. Is that possible in J?

I would also like to figure out how to modify nontrivial sequences of
indexes, for instance, diagonals or cells where both the row index and the
column index are even numbers. Where should I start if I want to do that
kind of thing?

Any suggestion would be highly appreciated.


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