我有一个工作和功能的python代码,但我不知道它是否可以更快。你知道吗
我们总共有四个相同形状的二维输入数组。其中三个数组包含整数(用作索引),另一个数组包含双精度。你知道吗
要优化的函数需要在包含数组的索引定义的位置将包含双精度数组的值添加到三维数组中。我的代码如下所示:
array_3D[index_one, index_two, index_three] += array_with_doubles
所以问题是:这是一种有效的编程方式吗?我不确定,但我希望[]索引符号可以被高效的东西所取代。这个函数调用了很多次,占用了我执行时间的+-50%(根据snakevis)。你知道吗
另一种不同的策略是降低3D数组的维数,尽管我可以想象代码在可读性方面会损失很多。你知道吗
更简单的2d案例:
如果“ravel”索引,可以使用
put
或target.flat
:一些快速时间比较(对于
=data
,而不是+=data
):target.flat[]=
是赢家-如果raveled索引已经可用。如果对相同的索引数组重复应用此计算,则可能会出现这种情况。请记住,小阵列上的时间测试在大阵列上的伸缩性可能不同。你知道吗用
+=
代替,put
不起作用。flat
具有速度优势,即使必须计算ravel
:但是-如果索引有重复,并且您希望添加所有
data
值,那么问题会发生显著变化。像这样的直接索引使用缓冲,所以只有最后添加的一个点才适用。你知道吗有关缓冲问题和替代方案的讨论,请参阅最近的SO问题
Vector operations with numpy
相关问题 更多 >
编程相关推荐