2015-04-23 152 views
0

我有几个元素的RADECz。它们表示元素的x,y,z位置。根据条件选择一些元素

它们是存储在数组中的值。

max(z) = 3.0,它是第三维我没有在这里显示。

我想什么做的是,除去根据特定的条件下面图片中的箱子里面的那些元素,给我的盒子之外的元素(带也z<1.0

enter image description here

所以从画面中的例子,我需要黑盒以外的所有这些元素与第三个条件沿着z<1.0

什么我都试过,是不工作如下

data_z = contains all the z values 
data_RA = contains all the RA values 
data_DEC = contains all the DEC values 

ra_lim = np.array([[40.0,43.0],[43.0,46.0],[46.0,50.0]]) 
dec_lim = np.array([[4.0,8.0],[0.0,4.0],[-2.0,0.0]]) 

new_z = data_z[(data_z<1.0) * ~(data_ra>ra_lim[0][0]) * ~(data_ra<ra_lim[0][1]) 
        * ~(data_dec>dec_lim[0][0]) * ~(data_dec<dec_lim[0][1])] 

new_RA = data_RA[(data_z<1.0) * ~(data_ra>ra_lim[0][0]) * ~(data_ra<ra_lim[0][1]) 
         * ~(data_dec>dec_lim[0][0]) * ~(data_dec<dec_lim[0][1])] 

new_DEC = data_DEC[(data_z<1.0) * ~(data_ra>ra_lim[0][0]) * ~(data_ra<ra_lim[0][1]) 
         * ~(data_dec>dec_lim[0][0]) * ~(data_dec<dec_lim[0][1])] 

所以基本上

~(data_ra>ra_lim[0][0]) * ~(data_ra<ra_lim[0][1]) 
         * ~(data_dec>dec_lim[0][0]) * ~(data_dec<dec_lim[0][1])] 

应该表示框~标志应该给我逆条件。即排除此框中的值并将剩余值返回给我。

但这似乎并不奏效。 如何获得箱子外的数值还有第三个条件z<1.0 ???

+0

什么是RA,DEC和z的形状? –

+0

@JulienSpronck它们都是一维的,等于'len(RA)== len(DEC)== len(z)= 35000' – ThePredator

+0

为什么用逆运算符选择,不要反转比较运算符?因此,不要使用'〜(data_ra = ra_lim [0] [1])' – physicalattraction

回答

2

这里是工作的一个小例子:

x = np.array([1,5,7,9,4,5,6,8,9,0,3]) 
y = np.array([2,4,5,7,3,2,6,2,7,8,3]) 

比方说,你想通过定义禁区外的所有元素(x < 6,Y < 5)。该框由(×< 6)*(y < 5)表示。如果你想要在盒子外面,你可以采取与之相反的结果:~((x < 6) * (y < 5))。这等于~(x < 6) + ~(y < 5)而不是~(x < 6) * ~(y < 5)(如你的代码所写)。

mask = ~(x < 6) + ~(y < 5) 
print x[mask] 
print y[mask] 
## [7 9 6 8 9 0] 
## [5 7 6 2 7 8] 

在你的情况下,掩模应该

mask = (data_z<1.0) * ~((data_ra>ra_lim[0][0]) * (data_ra<ra_lim[0][1]) 
        * (data_dec>dec_lim[0][0]) * (data_dec<dec_lim[0][1])) 
+0

有时候只是一个小错误会导致我们遇到问题!情况就是如此。除了重复的〜〜之外,我已经拥有了一切。 ! – ThePredator