I found that u\ has u inside the infix loop, which gives
a MUCH better implementation:
NB. combine first x axes of y
combineaxes =: ((*/@{. , }.) $) ($,) ]
NB. conjunction. Apply u on squares of size n
onsquares =: 2 : 0
yrank =. #$y
(n&((yrank&combineaxes)@:((n,n)&(u;._3))\)) y
)
What was killing me was applying onsquares to rank-3
operands. Now,
a3000_3000_3 =. i. 3000 3000 3
7!:2 '0: onsquares 10 a3000_3000_3'
208979456
Bigger (and slower) than I'd like, but at least it doesn't
fill memory.
Henry Rich
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Raul Miller
> Sent: Tuesday, July 29, 2008 8:45 PM
> To: Programming forum
> Subject: Re: [Jprogramming] Memory inefficiency in ;.3 ?
>
> On Tue, Jul 29, 2008 at 8:12 PM, Henry Rich
> <[EMAIL PROTECTED]> wrote:
> > It works on moderate-to-small pictures if I reboot my
> > system so virtual memory is clean. It is going to fail
> > no matter what on images bigger than 2kx2k, whereas a
> > more frugal implementation would succeed. I will hang on
> > & hope for improvements in a future release.
>
> $(+/%#)@,onsquares 3 ?64 64$0
> 62 62
> $(+/%#)@,onsquares 3 ?3000 3000$0
> 2998 2998
> (6!:2,7!:2) '(+/%#)@,onsquares 3 ?3000 3000$0'
> 3.16313 5.17861e8
>
> --
> Raul
> ----------------------------------------------------------------------
> For information about J forums see
> http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm