MATLink icon indicating copy to clipboard operation
MATLink copied to clipboard

Allow explicitly casting arrays to logicals

Open szhorvat opened this issue 10 years ago • 1 comments

MCell can be used to explicitly cast an expression to a cell, i.e. force interpretation as a cell.

MFunction["class"][Range[5]]
"double"

MFunction["class"][MCell@Range[5]]
"cell"

It would be useful to add support to cast to logical arrays explicitly, i.e. MFunction["class"][MLogical@UnitStep@Range[-5,5]] should return "logical".

This is because some functions only take logical arrays. An example is bwdistgeodesic. Large logical arrays, e.g. ones that represent binary images, are just not practical to be represented as arrays of True and False. A packed integer array is much better.

It's been a long time. What do you think?

szhorvat avatar Oct 05 '15 07:10 szhorvat

Yeah, this is definitely a good idea. Heh, we put it down as a todo but forgot :) (and seems like it wasn't missed much).

Since we're talking about large multidimensional arrays, perhaps we should avoid having to do ArrayQ[arr, testIfZeroOneIntegers] in the definition? I'm not sure if this would unpack. Perhaps something like MLogical[..., "Integer" -> True] and then we don't do Boole@ on it?

Either way, definitely a +1.

rsmenon avatar Oct 06 '15 00:10 rsmenon