Feature #9049

Updated by mrkn (Kenta Murata) over 2 years ago

 For NMatrix, we've implemented a range shorthand which relies on Hashes: `m[1=>3, 2=>4]`, (({m[1=>3,2=>4]})), for example, which returns rows 1 through 3 inclusive of columns 2 through 4 (also inclusive). The original goal was to be able to do `m[1:3, 2:4]` (({m[1:3,2:4]})) using the new hash notation, but the new hash notation requires that the key be a symbol — it won't accept an integer. 

 Whether through the hash interface or not, it'd be lovely if there were a shorthand for slicing matrices (and even Ruby Arrays) using colon. This could just be an alternate syntax for ranges, also — which might make more sense. 

 The other related shorthand we'd love to find a way to implement is the all-inclusive shorthand. It gets to be a pain to type `n[0...n.shape[0], 1...3]` (({n[0...n.shape[0],1...3]})) to get a submatrix (a slice), and it's really difficult to read. As a work-around, we currently use the `:*` (({:*})) symbol: `n[:*, 1...3]`. (({n[:*,1...3]})). But it'd be simpler if there were a way to use a splat operator without an operand as a function argument. It might be a special case where the `*` (({*})) is treated as a `:*` (({:*})) automatically. But this edge case might cause confusion with error messages when users make syntax errors elsewhere. 

 The colon shorthand is the highest priority for us.