根据条件选择一些元素

Srivatsan

我有RADECz几个元素。它们有点表示元素的x,y,z位置。

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

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

我想做的是,根据某些条件,删除下面图片中框内的那些元素,然后将框外的那些元素给我(还有z<1.0

在此处输入图片说明

因此,从图片示例中,我需要黑匣子之外的所有这些元素以及第三个条件 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

朱利安·斯普朗克(Julien Spronck)

这是一个有效的小示例:

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)定义的框。该框由(x <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]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章