There's some special code which IIRC this uses:
NB. x is a string. y is a table of (start,length) selections from x
NB. Result is a string, with the selected parts of x run together.
NB. Each interval in y must start within the bounds of x, even if the
length is 0
substrs =: (;@:(<;.0)~ ,."1)~
Henry Rich
On 12/9/2014 2:55 PM, Joe Bogner wrote:
Brian, thank you. That also works and I hadn't considered it but the
peformance is not so great on a large string:
timespacex 'str(<@[{&>~([<@:+i.@])/"1@:]) slices'
2.44429 6.03512e8
timespacex '(str ];.0~ ,.)"1 slices'
0.385588 3.14331e8
$slices
2000000 2
$str
10000000
I don't know if cut ;.3 would help. I don't really understand the nuvoc
entry or dictionary for it (
http://www.jsoftware.com/jwiki/Vocabulary/semidot3#dyadic or
http://www.jsoftware.com/help/dictionary/d331.htm)
It seems like a special case could be written if it doesn't exist for this
scenario.
Using a 67MB string causes more than 2GB of memory use (out of memory
error) with :(str ];.0~ ,.)"1 slices ... It's really fast when memory isn't
an issue, even though it's calling jtcut02 for each row
Back to our simple example:
We could write some imperative code that would port well to C:
subarrays2=: 4 : 0
max=: >./ 1{"1 y
rows=: {. $ y
ret=: (rows,max) $ ' '
row=:0
for_i. i. rows do.
'start len'=: i { y
col=:0
for_n. start+i.len do.
ret=:(n { x) (<row, col) } ret
col=:>:col
end.
row=:>:row
end.
ret
)
str=: 'ab|111*cd|222'
slices=:(0,2),(3,3),(7,2),:(10,3)
](str subarrays2 slices)
ab
111
cd
222
This loop has no memory pressure but is extremely slow in J. It completes
in about 2 minutes on 10 million rows of data. I suspect it would be very
fast in C since the array can be pre-allocated and two loops.
I could always patch my J binary with it but was wondering if something
already existed.
On Tue, Dec 9, 2014 at 1:27 PM, Brian Schott <[email protected]> wrote:
Joe,
Is this relevant?
str(<@[{&>~([<@:+i.@])/"1@:]) (0,2),(3,3),(7,2),:(10,3)
--
(B=)
----------------------------------------------------------------------
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