change dim of matrix without altering data

Jan 7, 2013 at 3:34am

change dim of matrix without altering data

Is there an optimal way to do this? Say for example I have a “char 5 5″ matrix and I want to change it to a “char 1 25″ matrix. Where the underlying data doesn’t change and isn’t copied, just the way its dimmed is changed. Hoping there was something like jit.coerce for changing the dimension…

#65949
Jan 7, 2013 at 5:08pm

Here’s one way.

– Pasted Max Patch, click to expand. –
#237496
Jan 8, 2013 at 1:53am

Thanks Chistopher. I actually am using the jit.spill and jit.fill technique now but its slow – even slower since I have 4 plane matrices and got to split apart the planes and rejoin them after. The thing that grabs me is that data is exactly the same before and after: in the “4 char 5 5″ to “4 char 1 25″ conversion example both matrices have the same 25 RGB values in the same order (I think). Can’t I leave the data intact and un-copied and just “header munge” (disclaimer: I’m not really sure what that means) the matrix dimensions. This would all happen in a billionth of a millisecond with one object, as opposed to the slow rube goldberg contraption I am using now ;)
Anybody?

#237497
Jan 8, 2013 at 6:33am

Sure, the data is the same, and in fact I think (I haven’t looked at the Jitter SDK in a long time) that the internal storage method is extremely similar, so it would probably not be too tough to make a single Jitter object that does what you’re suggesting (just changes the matrix dimensions while holding the same data). But I’m not aware of any object that does that, and as you can see there’s more than one way to “flatten” a 2D matrix into a 1D matrix (by rows top to bottom, or by columns left to right, or by rows bottom to top, or by columns right to left, or by some other algorithm), not to mention trying to figure out a generalizable way to convert any matrix dimension to any other matrix dimension while still retaining the data in a knowable order.

So you might ask yourself why you need to do this conversion. Is it possible that you can just change your ideas about how to access the data in its original form? That is, what can you do with data in a 25×1 matrix that you can’t do with it in a 5×5 matrix?

#237498
Jan 8, 2013 at 8:01am

hey, you can use jit.scanwrap:

– Pasted Max Patch, click to expand. –
#237499
Jan 8, 2013 at 2:52pm

There ya go! Thanks, Tobias. I forgot about that one.

#237500
Jan 9, 2013 at 2:05am

Thats the ticket! Thank Tobias – and I thought I searched through all those those jit objects that I’ve never used and understood poorly, but there it is.
Thanks Christopher, for the spending the time to help solve my problem. BTW, in answer to your question of what I can do with a “4 char 25 1″ matrix that I can’t do with a “4 char 5 5″ matrix: I need to output every frame of a playing video as a list to send to an array of LED tiles. But I need to reorder the pixels so that each tile’s pixels are sent out in consecutive order. To complicate matters I am trying to create a generalized solution for arrays of different sizes and configurations. I’ve tried a variety of solutions – currently I’m using javascript to create the right number of tile-sized jit.submatrix objects and stepping through the tile array a tile at a time. The new solution I’m investigating is to use jit.expr to reorder the pixels in a single step but the only algorithm I could muster involved “flattening” the video data to one dimension so that I only needed to calculate my displacements in x. Also trying to figure out if I can do this somehow in Gen, but so far this is exceeding my capabilities – the normalization of x and y coordinates in Gen has complicated my determination of a displacement algorithm…

#237501

You must be logged in to reply to this topic.