对不同的数组元素进行有效的位测试条件迭代

时间:2014-10-31 11:24:54

标签: python numpy iteration

我有两个形状相同的2D-numpy数组,一个包含数据,另一个类型'ubyte'存储每个像素的位标志。我想访问数据数组中bitflags-array中有特定标志的每个像素。

我可以遍历任一阵列中的每个像素并使用多索引来获取像素和像素值,例如

it = np.nditer(array, flags=['multi_index'])
while not it.finished:
    if bitflags[it.multi_index] & FLAG:
        do_something(array[it.multi_index])
    it.iternext()

由于大多数像素没有相应的位标集,我宁愿找到具有给定位标记的所有像素(例如使用numpy.where(bitflags & FLAG)并仅迭代这些像素 - 类似

pixels = np.where(bitflags & FLAG)
for pixel in array[pixels]:
    do_something()

我有没有办法让原始数组的索引在do_something()中使用?

1 个答案:

答案 0 :(得分:1)

不完全确定我是否正确理解了您的问题,但您是否正在寻找此问题:

pixels, = np.where(bitflags & FLAG)
for i, pixel in zip(pixels, array[pixels]):
    do_something(i, pixel)