我有一个数据多维数据集,具有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]]}
答案 0 :(得分:0)
OP解释了分配
mask = {'xmask': [xcoords[abs(xcoords[:] - x0) < radius]],
'ymask': [ycoords[abs(ycoords[:] - y0) < radius]]}
解决了问题。