Yes: This mechanism, and the insight behind it, is the heart of the multi-dimensional array mechanism.
As a simple example, if you have a 10x10x10 array, and you want the value at index 6,7,3 that value is at index 673 of the ravel of that array. It's about which representation is most convenient for the operation you are performing. Thanks, -- Raul On Sat, Oct 11, 2014 at 1:43 AM, Jon Hough <jgho...@outlook.com> wrote: > Also, regarding Ben Gorte's > > Idot =: $ #: I.@:, > > This is an equivalent of I. for higher dimensions. > > I'm having trouble understanding how this works. > > Here is my understanding. > > 1. ravel the matrix and index elements (I.@:,) > 2. Next is a fork of $ #: I.@:, > > Right "prong" is the aforementioned element indices. > > Left "prong" is the shape of the original array/matrix. > > middle "prong" is the antibase of the right prong w.r.t. the left. > > This seems to work for matrices of any size or dimension. > > Is this the standard way to index multidimensional arrays? > > > > > From: jgho...@outlook.com > > To: programm...@jsoftware.com > > Date: Sat, 11 Oct 2014 06:33:45 +0100 > > Subject: Re: [Jprogramming] Project Euler 85, Python and J > > > > Using (2 ! >:) is clearly better than doing my double for-loop. I'm > embarrassed I missed that. > > > > The real meat of my confusion with multidimensional arrays is in not > just finding the indices but doing something with the elements at the > indices. > > > > e.g. For a single dimension array, there could be a function to fund the > primes less than 100. > > > > > > primelist =: (I.@:(1&=)@:(1&p:)) { ] > > > > > > and primelist >: i. 100 > > > > > > should spit out > > > > > > 2 3 5 ... ...97 > > > > > > But what if instead of having >: i. 100 > > > > I had ( for some reason ) > > > > arr =: 10 10 $ >: i. 100 > > > > > > So I have a 10 by 10 matrix of all positive ints up to 100. > > > > > > primelist clearly will not work on arr. But if I want to return the list > of primes, as a single dimensional list I'm not sure how to do that. > > > > > > Or, for example, if I want to change the elements of arr to 1 if and > only if the sum of the (i, j) indices are prime (just a random example). > > > > > > In procedural python this could be quickly done with a double for-loop > and a prime test. In J this type of problem still escapes me. > > > > > > > > > Date: Fri, 10 Oct 2014 19:35:26 -0400 > > > From: devon...@gmail.com > > > To: programm...@jsoftware.com > > > Subject: Re: [Jprogramming] Project Euler 85, Python and J > > > > > > countRects=: */@(2 ! >:) NB. How many pairs each of > vertical > > > * horizontal lines > > > getSizes=: ,@(>:/~) # [: ,/ ,"0/~ NB. All pairs of i. y > > > idxClosest=: 4 : '(i. <./)@(x |@:- ])y'"(0 2) NB. Index of mat y > to > > > value x > > > ({~ *2e6*&idxClosest@:(countRects"1)) getSizes >: i.200 NB. > Closest > > > to 2e6 > > > 77 36 > > > ({~ *1e6*&idxClosest@:(countRects"1)) getSizes >: i.200 NB. > Closest > > > to 1e6 > > > 63 31 > > > countRects"1 ] 63 31,:77 36 NB. How close is each? > > > 999936 1999998 > > > > > > > > > On Fri, Oct 10, 2014 at 1:14 PM, Linda Alvord <lindaalv...@verizon.net > > > > > wrote: > > > > > > > What is the correct answerfor this problem? > > > > > > > > Linda > > > > > > > > -----Original Message----- > > > > From: programming-boun...@forums.jsoftware.com > > > > [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of > Stefano > > > > Lanzavecchia > > > > Sent: Friday, October 10, 2014 11:47 AM > > > > To: programm...@jsoftware.com > > > > Subject: Re: [Jprogramming] Project Euler 85, Python and J > > > > > > > > Actuary the use of ravel and antibase is common practice to solve > > > > certain problems in APL and isn't considered cheating. So I wouldn't > > > > say it's "not nice" but I would definitely go for antibase instead of > > > > a combination of floored-divide and modulus. As a bonus, a solution > > > > based on antibase would scale to problems of any rank and not just 2d > > > > matrices. > > > > > > > > Have fun! > > > > -- > > > > Stefano > > > > > > > > > On 10/ott/2014, at 17:35, Sebastiano Tronto < > sebastiano.tro...@gmail.com > > > > > > > > > wrote: > > > > > > > > > > Hi, > > > > > A dirty trick to get the job done would be to ravel the matrix ( , > ), > > > > solve > > > > > the 1d version of the problem and then get the "true" indexes with > > > > > something like (<.@%&200 , 200&|). > > > > > For example, if you needed to just find the max: > > > > > (<.@%&200 , 200&|) (i. >./) , m > > > > > where m is your matrix. > > > > > > > > > > I know this isn't a nice way to solve the problem, but it should > work. > > > > > > > > > > Sebastiano > > > > > > > > > > 2014-10-07 6:37 GMT+02:00 Jon Hough <jgho...@outlook.com>: > > > > > > > > > >> Project Euler 85: https://projecteuler.net/problem=85 > > > > >> This problem is not really conceptually hard, but I am struggling > with a > > > > J > > > > >> solution.I have solved it in Python: > > > > >> ============================================= > > > > >> def pe85(larg, rarg): count = 0 llist = range(1, larg+1) > > > > >> rlist = range(1, rarg+1) > > > > >> for l in llist: for r in rlist: > count += > > > > >> l*r > > > > >> return count > > > > >> > > > > >> if __name__ == "__main__": # test for 2x3 grid, as in > question. > > > > k > > > > >> = pe85(2,3) print "Test value: "+str(k) l1 = > range(1,200) > > > > # > > > > >> 200 lucky guess l2 = range(1,200) bestfit = 10000 # > just a big > > > > >> number area = 0 for i in l1: for j in l2: > > > > >> diff = abs(2000000 - pe85(i,j)) > if diff > > > > < > > > > >> bestfit: area = i*j > > > > >> bestfit = diff > > > > >> print "AREA is "+str(area) > > > > >> > > > > >> > > > > >> ================================================The above script > will > > > > give > > > > >> the final area of the closest fit to 2 million. (The python code > may not > > > > be > > > > >> the best). Also I tested all possibilities up to 200x200, which > was > > > > chosen > > > > >> arbitrarily(~ish). > > > > >> Next my J. I go the inner calculation ok (i.e. see the function > pe85 > > > > >> above). In J I have: > > > > >> pe85 =: +/@:+/@:((>:@:i.@:[) *"(0 _) (>:@:i.@:])) > > > > >> NB. I know, too brackety. Any tips for improvement appreciated. > > > > >> > > > > >> > > > > >> But from here things get tricky. If I do the calculation over > 200x200 > > > > >> possibilities I end up with a big matrix, of which I have to find > the > > > > >> closest value to 2 million, of which then I have to somehow get > the > > > > (x,y) > > > > >> values of and then find the area by x*y. > > > > >> > > > > >> The main issue is getting the (x,y) from the best fit value of the > > > > array. > > > > >> > > > > >> i.e. If I do pe85"(0)/~ 200, I get a big array, and I know I can > get the > > > > >> closest absolute value to 2 million but then I need to get the > original > > > > >> values to multiply together to give the best fit area. Actually I > have > > > > >> bumped into this issue many times. It is easy enough in a 1-d > array,just > > > > do: > > > > >> (I. somefunc ) { ]) > > > > >> > > > > >> or similar to get the index. But for two indices the problem is > beyond > > > > me > > > > >> at the moment. Any help appreciated.Regards,Jon > > > > >> > > > > >> > > > > >> > > > > >> > ---------------------------------------------------------------------- > > > > >> 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 > > > > > > > > > > > > > > > > -- > > > Devon McCormick, CFA > > > ---------------------------------------------------------------------- > > > 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