【问题标题】:Selecting some elements based on conditions根据条件选择一些元素
【发布时间】:2015-07-01 14:34:45
【问题描述】:

我有几个元素的RA 和DEC 和z。它们有点表示元素的 x、y、z 位置。

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

max(z) = 3.0,第三维我这里没有展示。

我想做的是,根据一定的条件,把下图中框内的那些元素去掉,把框外的那些元素给我(还有z<1.0) p>

因此,从图片中的示例来看,我需要黑盒子之外的所有元素以及第三个条件 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&lt;1.0???

【问题讨论】:

  • RA、DEC、z的形状是什么?
  • @JulienSpronck 它们都是一维的,等于len(RA)==len(DEC)==len(z) = 35000
  • 为什么用逆运算符选择,而不是比较运算符逆?所以不要使用~(data_ra&lt;ra_lim[0][1]),而是使用(data_ra&gt;=ra_lim[0][1])

标签: python numpy conditional-statements slice


【解决方案1】:

这是一个有效的小例子:

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 ~((x < 6) * (y < 5))。这等于~(x &lt; 6) + ~(y &lt; 5) 而不是~(x &lt; 6) * ~(y &lt; 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]))

【讨论】:

  • 有时候一个小错误就会给我们带来麻烦!!情况就是这样。除了重复的~,我什么都做对了! !
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
相关资源
最近更新 更多