首页 > 解决方案 > 如何更改只有 0 和 1 的 2d numpy 数组中所有 1 的索引?

问题描述

我有一个只有 0 和 1 的 2d numpy 数组(arr)。

例如,shape(h,w) 中的 2d numpy 数组。

我想将数组的大小调整为 shape(h // scale, w // scale),并且我需要保留所有的 1。

# arr is a 2d numpy array
h, w = arr.shape
h_new, w_new = h // scale, w // scale
arr_new = np.zeros((h_new, w_new))
for i in range(h):
    for j in range(w):
        if arr[i, j] == 1:
            arr_new[i // scale, j // scale] = 1

例如,像这样的二维数组,并且 scale=2:

[
    [0,0,0,0],
    [0,1,0,0],
    [1,0,0,1],
    [0,0,0,1]
]

运行代码后, arr_new 将是:

[
    [1,0],
    [1,1]
]

所有1s坐标的变化:

(1,1) -> (0,0)
(2,0) -> (1,0)
(2,3) -> (1,1)
(3,3) -> (1,1)

有一个更好的方法吗?

谢谢。

标签: pythonpython-3.xnumpy

解决方案


只需通过将每个维度拆分为 grid 来重塑数组(SIZE // SCALE, SCALE)max()接下来使用让1控制 SCALExSCALE 单元格的大小 SCALE 减小所有维度。

arr.reshape(h//scale, scale, w // scale, scale).max(axis=(1,3))

请注意,此解决方案需要 shape ofarray为多重性 os (scale, scale)


推荐阅读