2016-06-28 91 views
0

我完全不熟悉编码,几乎不知道我在做什么。目前我正在尝试从适合文件中的银河系中心找到每个像素的半径。我被告知要通过创建一个与fits文件大小相同的空数组来尝试这种方法,并且我试图对每个x值使用for循环,而对每个y值使用for循环。到目前为止,我拥有这个数组并试图创建for循环。idl每个像素的半径

xcenter =249.8 
ycenter =250.0 

d=fltarr(500,500) 

for i=0,499 do begin 
    d=d(i-xcenter,*) 
endfor 

for j=0,499 do begin 
    d=d(j-ycenter,*) 
endfor 

我知道这看起来很糟糕,我显然不知道我在做什么。所以如果任何人都可以提供任何帮助,我会很感激。

回答

2

让我们先看一个更简单的版本。假设你在一条线上有10个点,并且你想计算来自xref的每个点的距离。 IDL支持矢量数学,所以你可以这样做:

xref = 5.4 
x = dindgen(10) 
distance = abs(x - xref) 

我在这里使用了DINDGEN命令,你可以查找的帮助。现在在2d的情况下,你需要二维数组:一个是500 * 500的数组,其中包含每个像素的X坐标,另一个包含Y坐标。所以数组必须是这样的形式,

0 1 2 3 ... 
0 1 2 3 ... 
0 1 2 3 ... 

0 0 0 0 ... 
1 1 1 1 ... 
2 2 2 2 ... 

我们可以使用#操作生成它们。请注意,IDL默认从0开始计数。

just_one = replicate(1d, 500) ; contains 1 1 1 1 ... 
one_500 = dindgen(500)  ; contains 0.0 1.0 2.0 ... 
x = just_one # one_500 
y = one_500 # just_one 

现在可以计算距离和往常一样,d = SQRT(X X + Y Y),但再次使用矢量数学:

distance = sqrt((x - xref)^2 + (y - yref)^2) 

这是一个500×500阵列,其中包含每个像素距离外部参照,yref点的距离。

+0

谢谢!这非常有帮助! – LexieStark