如何在Python的字典中建立双循环?

时间:2019-05-26 14:45:26

标签: python-3.x

我有一个数据多维数据集,具有2个维度的坐标和第3个维度的波长。我的目标是为中心坐标(在我的代码中为x0和y0)的给定半径的圆之外的坐标编写一个掩码。为此,我尝试使用字典,但遇到麻烦,因为似乎必须在字典内进行两次循环才能遍历两个维度,作为初学者,我不喜欢还不知道该怎么做。

我写了以下代码

x0 = 38
y0 = 45
radius = 9

xcoords = np.arange(1,flux.shape[1]+1,1)
ycoords = np.arange(1,flux.shape[2]+1,1)

mask = {'xmask': [xcoords[np.sqrt((xcoords[:]-x0)**2 + (y-y0)**2) < radius] for y in ycoords], 'ymask': [ycoords[np.sqrt((x-x0)**2 + (ycoords[:]-y0)**2) < radius] for x in xcoords]}

它返回了几个数组,每个y的值一个(用于xmasks),每个x的值一个(用于ymasks),尽管我只希望每个数组一个。谁能说我做错了什么以及如何实现我的目标?

注意:我也没有使用字典,就像

xmask = []
for x in xcoords:
    for y in ycoords:
        if np.sqrt((x-x0)**2 + (y-y0)**2) < radius:
            xmask.append(x)
            break

ymask = []
for y in xcoords:
    for x in ycoords:
        if np.sqrt((x-x0)**2 + (y-y0)**2) < radius:
            ymask.append(y)
            break

但是我希望有可能使它更有效。

感谢您的帮助!

编辑:我意识到不需要循环。如果选择y = y0和x = x0,则分别获得圆内的x和y值。所以我留下来了

mask = {'xmask': [xcoords[abs(xcoords[:]-x0) < radius]], 'ymask': [ycoords[abs(ycoords[:]-y0) < radius]]} 

1 个答案:

答案 0 :(得分:0)

OP解释了分配

mask = {'xmask': [xcoords[abs(xcoords[:] - x0) < radius]],
        'ymask': [ycoords[abs(ycoords[:] - y0) < radius]]}

解决了问题。