Raul, I see your point. I was expecting too much from 'readtable', and I apparently need a 'readtensor' verb for my app.
On Sun, Apr 16, 2017 at 4:02 PM, Raul Miller <[email protected]> wrote: > On Sun, Apr 16, 2017 at 2:26 PM, Michael Goodrich > <[email protected]> wrote: > > Why does J not treat a column of numbers as a N by 1 'matrix' ie a vector > > rather than a list? > > From my point of view, J does treat a column of numbers as an N by 1 > matrix. > > But perhaps it is better to go over specific examples (like other > people have been doing here). > > $,.1 2 3 2 1 > 5 1 > ($,.1 2 3 2 1) > 5 1 > $,:1 2 3 2 1 > 1 5 > $(,.1 2 3 2 1) +/ .* ,:1 2 3 2 1 > 5 5 > $(,:1 2 3 2 1) +/ .* ,.1 2 3 2 1 > 1 1 > > But the real issue here is readtable defined at > http://www.jsoftware.com/help/primer/files.htm > > readtable =: 3 : 0 > d =. 1!:1 y > d =. toJ d > d =. cutopen d > d =. 0 ". each d > d =. > d > ) > > Here, as Chris Burke pointed out, each line of the file is converted > to numeric form using 0 ". expression, and when a line contains only > one number you do not get a list of numbers of shape 1, but instead > just get a number. When these results are merged into the final form > you get a list instead of a table. (But this list is a vector, from a > J point of view... if that seems confusing, bear with me.) > > The underlying issue that I think you might be asking about is that > the mathematical point of view which J was built on was tensor algebra > rather than matrix algebra. So, rather than "everything is a matrix" > we instead go with "everything is a tensor" (or, in the jargon used by > many computer programmers: "everything is an array of arbitrary > dimension"). > > So, going back a bit, when we do something like 0 ". '93' we get a > result which is an numeric array with zero dimensions. > > If you wanted to force readtable to always return a matrix result, you > could do something like this: > > readtable =: 3 : 0 > d =. 1!:1 y > d =. toJ d > d =. cutopen d > d =. 0 ". each d > d =. , each d > d =. > d > ) > > This will force each individual line to be a 1 dimensional array, so > when they are assembled into the result you always will get a matrix. > (And note that you do not have to worry about the analogous issue for > one row files because cutopen always returns a list of boxes.) > > I hope this helps, > > -- > Raul > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > -- Dominus enim Iesus Ecclesiae Suae et, -Michael "Let your religion be less of a theory and more of a love affair." - G.K. Chesterton ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
