gpt4 book ai didi

python - 在python中应用具有周期性边界条件的圆形掩模

转载 作者:太空狗 更新时间:2023-10-30 03:00:45 24 4
gpt4 key购买 nike

这个问题是关于:How to apply a disc shaped mask to a numpy array?

来自解决方案:https://stackoverflow.com/a/8650741/4484153 , 是否可以通过以下方式获得圆形掩码:

>>> new_arr
array([[ True, True, True, True, 1., 1., 1., True],
[ True, True, True, True, True, 1., True, True],
[ True, True, True, True, 1., 1., 1., True],
[ True, True, True, True, 1., 1., 1., True],
[ 1., True, 1., 1., 1., 1., 1., 1. ],
[ 1., 1., 1., 1., 1., 1., 1., 1. ],
[ 1., True, 1., 1., 1., 1., 1., 1. ],
[ True, True, True, True, 1., 1., 1., True]])

以数组环绕其列和行的方式?

最佳答案

一种方法可能只是在数组的中心创建所需大小的掩码,然后使用 np.roll 沿轴移动掩码(这会导致掩码环绕数组的边缘)。

按照链接问答中的方法:

ones = np.ones((8, 8))

a, b = 3, 3
n = 8
r = 3
mask = x**2 + y**2 <= r**2

像这样构造掩码:

array([[False, False, False,  True, False, False, False, False],
[False, True, True, True, True, True, False, False],
[False, True, True, True, True, True, False, False],
[ True, True, True, True, True, True, True, False],
[False, True, True, True, True, True, False, False],
[False, True, True, True, True, True, False, False],
[False, False, False, True, False, False, False, False],
[False, False, False, False, False, False, False, False]], dtype=bool)

然后将mask向上滚动两个位置,向左滚动两个位置,并将其用于ones...

>>> rolled_mask = np.roll(np.roll(mask, -2, axis=0), -2, axis=1)
>>> ones[rolled_mask] = 255
>>> ones
array([[ 255., 255., 255., 255., 1., 1., 1., 255.],
[ 255., 255., 255., 255., 255., 1., 255., 255.],
[ 255., 255., 255., 255., 1., 1., 1., 255.],
[ 255., 255., 255., 255., 1., 1., 1., 255.],
[ 1., 255., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 255., 1., 1., 1., 1., 1., 1.],
[ 255., 255., 255., 255., 1., 1., 1., 255.]])

关于python - 在python中应用具有周期性边界条件的圆形掩模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28097993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com