繁体   English   中英

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

[英]How to speed up iteration over part of a numpy array

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

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

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)

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

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

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])

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

您基本上是在尝试重新创建蒙版数组 这个页面给出了很好的介绍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM