Optimization 具有最小内存占用的连续项比较

Optimization 具有最小内存占用的连续项比较,optimization,j,memory-optimization,Optimization,J,Memory Optimization,在J(使用J503,而不是J6或7)中,通常当我想查看数组的元素是否比它们的前一个元素小时,我会使用以下方法: smaller =: }:<:}. 在内部,}:和}。创建两个数组(一个省略最后一项,另一个省略第一项),最后允许编辑: 在J504中,使用rotate(1 |)似乎是迄今为止最好的选择: smallerS =: <:1&|. l =: ?. 10000$1000 ;memuse &.> 'smaller l';'smaller2 l';'sm

在J(使用J503,而不是J6或7)中,通常当我想查看数组的元素是否比它们的前一个元素小时,我会使用以下方法:

   smaller =: }:<:}.
在内部,
}:
}。
创建两个数组(一个省略最后一项,另一个省略第一项),最后允许
编辑:
在J504中,使用rotate(1 |)似乎是迄今为止最好的选择:

smallerS =: <:1&|.
l =: ?. 10000$1000
;memuse &.> 'smaller l';'smaller2 l';'smallerS l'
148480 214400 82880
编辑: 在J504中,使用rotate(1 |)似乎是迄今为止最好的选择:

smallerS =: <:1&|.
l =: ?. 10000$1000
;memuse &.> 'smaller l';'smaller2 l';'smallerS l'
148480 214400 82880

原因是:数以百万计的数组需要这样做。当我想到它的时候,在它的块上循环听起来更理智……原因是:数百万大小的数组需要这样做。当我想到它的时候,在它的各个部分上循环听起来更理智……我本以为'2It甚至在4.06发行说明中这样说:“2F/\x在时间和空间上比同等的(}:x)f(}.x)更有效”,但我在j504中运行了相同的基准测试,事实并非如此。j4和j5之间发生了一些事情,使得
f/\
{:f}更糟糕。
。另外,尝试使用旋转(新编辑)。@MPelletier对于J7,结果分别是
280576 18304 149248
对于较小的、较小的2和较小的。奇怪的是,
更小的
更小的
在随后的J版本中表现得更差。
0>:2-/\y
在我的测试中占用263552字节,但在J503中,您使用旋转的方法只占用82880字节,与J504相同。给人印象深刻的我本以为'2It甚至在4.06发行说明中这样说:“2f/\x在时间和空间上比等价的(}:x)f(}.x)更有效”,但我在j504中运行了相同的基准测试,结果并非如此。j4和j5之间发生了一些事情,使得
f/\
{:f}更糟糕。
。另外,尝试使用旋转(新编辑)。@MPelletier对于J7,结果分别是
280576 18304 149248
对于较小的、较小的2和较小的。奇怪的是,
更小的
更小的
在随后的J版本中表现得更差。
0>:2-/\y
在我的测试中占用263552字节,但在J503中,您使用旋转的方法只占用82880字节,与J504相同。给人印象深刻的
   smaller2 =: 13 : '2<:/\y.'
   memuse 'smaller i'
214400
smallerS =: <:1&|.
l =: ?. 10000$1000
;memuse &.> 'smaller l';'smaller2 l';'smallerS l'
148480 214400 82880
2<:/\y
0>:2-/\ y