如何加快部分numpy数组的迭代速度

时间:2013-05-16 15:58:57

标签: python numpy

我有一个numpy的大型三维数组(比方说大小为100x100x100)。我想迭代它的一部分很多次(大约70%的元素),我有一个大小相同的布尔矩阵,并定义元素是否应该完成操作。

我目前的方法是首先创建一个形状为“coords”的数组(N,3),其中包含要进行操作的所有坐标,然后

for i in np.arange(many_iterations):
    for j in coords:
        large_array[j] = do_something(large_array[tuple(j)])

实际上评估整个数组并在循环中包含一个额外的操作以测试布尔数组是否更好(请记住,事实评估然后是多次而不是一次)。我的想法是,在这种情况下的回报将摆脱for循环

large_array = do_something(large_array if condition True)

在这种情况下如何使最后一行工作?

2 个答案:

答案 0 :(得分:3)

首先创建一个定义应该操作位置的布尔数组,可能会获得更好的性能:

big_3d_arr = some 100x100x100 array
where_to_operate_arr = big_3d_arr < 500 # or whatever your condition is
big_3d_arr[where_to_operate_arr] = do_something(big_3d_arr[where_to_operate_arr])

这样的东西可能会起作用,但你可能需要迭代并按块进行布尔索引,具体取决于你的应用程序。

答案 1 :(得分:3)

您基本上是在尝试重新创建masked arraysThis页面提供了很好的介绍。