避免多维数组中的for循环

时间:2018-08-31 18:10:22

标签: python numpy indexing

所以我有一个3D阵列:

>>> img_data.shape
(182, 218, 182)

我的想法是将每个等于0的值替换为255。我尝试过:

new_img = np.zeros(img_range)
print(new_img.shape)
for i in range(img_range[0]):
    for j in range(img_range[1]):
        for k in range(img_range[2]):
            print "%s %s %s" % (i, j, k )
            if img_data[i][j][k] == 0:
                new_img[i][j][k] = 2
            else:
                new_img[i][j][k] = img_data[i][j][k]

但是这是永远的,很可能是因为Python是动态的并且可能在后台执行某些操作。

关于如何改善这一点的任何想法? 谢谢, 罗德里戈

1 个答案:

答案 0 :(得分:1)

您不需要编写自己的循环。 您可以使用方括号[]访问符合一个或多个条件的所有元素。检查boolean array indexing

示例:

import numpy as np

a = np.random.randint(0, 5, size=(10, 10, 10))
a[a == 0] = -100