繁体   English   中英

按索引为二维数组构建掩码

[英]building mask for 2d array by index

考虑以下掩码:

def maskA(n):
    assert((n % 2) == 0)

    sample_arr = [False, False]
    bool_arr = np.random.choice(sample_arr, size=(n, n))
    # print(bool_arr.shape)

    for i in range(n):
        for j in range(n):
            if (i >= n//2) and (j < n//2):
                bool_arr[i, j] = True
            else:
                bool_arr[i, j] = False

    for i in range(n):
        for j in range(n):
            if (i < n//2) and (j >= n//2):
                bool_arr[i, j] = True or bool_arr[i, j]
            else:
                bool_arr[i, j] = False or bool_arr[i, j]
    return bool_arr

a.network 中簇之间的 select 个元素(2 xn/2 su.networks 或 True 元素)。

[[False False False  True  True  True]
 [False False False  True  True  True]
 [False False False  True  True  True]
 [ True  True  True False False False]
 [ True  True  True False False False]
 [ True  True  True False False False]]

有没有可能让它变得更好(更短、更干净、更快)?

您可以使用索引来分配值,而不是使用 for 循环。

import numpy as np

def maskA(n):
    assert((n % 2) == 0)

    bool_arr = np.full((n, n), True)
    bool_arr[0:int(n/2), 0:int(n/2)] = False
    bool_arr[int(n/2):n, int(n/2):n] = False

    return bool_arr


print(maskA(8))

暂无
暂无

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

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