numpy矩阵特定的函数,例如x.max()
在应用多次时是否缓冲?你知道吗
所以应该写:
bincount=np.apply_along_axis(lambda x: np.bincount(x, minlength=data.max()+1), axis=0, arr=data)
或者更好
data_max=data.max()+1
bincount=np.apply_along_axis(lambda x: np.bincount(x, minlength=data_max), axis=0, arr=data)
其中数据为
data=np.array([[1,2,5,4,8,7,8,9,14,8,14,5,2,1],
[5,8,7,13,7,8,9,21,5,7,9,24,3,2]])
当然,甚至更大
正如Slater Tyranus所指出的,只有基准KR才会显示任何结果:
我也用更大的数据进行了测试。总的来说,我们可以说,它在计算
data_max=data.max()
之前是有回报的。数组越大,差异就越大。你知道吗更新问题之后,您似乎在问numpy是否实现了某种形式的缓存。虽然对这个问题没有一般性的回答,但是对于
ndarray.max
这样的方法,显然没有进行缓存。你知道吗如果不看执行情况,我们怎么知道呢?考虑到缓存方案必须解决两个问题:
虽然第一个问题很重要,但第二个问题才是真正的杀手。不仅numpy数组可以随时更改,而且数组的内容可以被许多对象共享。另外,C代码可以获得内部缓冲区的地址,并实现对底层内存的修改。缓存结果将有效地禁用numpy的许多有趣的用法。你知道吗
您可以将numpy视为一个低级库,它本身并不关心这种性质的优化。如果需要缓存,应该在更高的级别上实现,如第二个示例所示。你知道吗
相关问题 更多 >
编程相关推荐