Python 删除两个相同长度数组中的nan和相应元素
我有两个长度相同的列表,可以将它们转换为数组来使用该方法。现在,这些列表的一些元素是Python 删除两个相同长度数组中的nan和相应元素,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,我有两个长度相同的列表,可以将它们转换为数组来使用该方法。现在,这些列表的一些元素是nan,因此不能用于该方法。在我的例子中,最好的方法是删除这些元素,以及其他列表中的相应元素。有没有一种实用的方法? 我有 [1南4南5 6]和[1南3南5 6] 最后我需要 [1 5 6] [1 5 6] (这里的数字代表位置/指数,而不是我正在处理的实际数字)。编辑:这里需要技巧的部分是在一个数组中包含不带nans的列表/数组,在另一个数组中包含与nans对应的元素,反之亦然。虽然这当然可以通过操纵数组来完成
nan
,因此不能用于该方法。在我的例子中,最好的方法是删除这些元素,以及其他列表中的相应元素。有没有一种实用的方法?
我有
[1南4南5 6]
和[1南3南5 6]
最后我需要
[1 5 6]
[1 5 6]
(这里的数字代表位置/指数,而不是我正在处理的实际数字)。编辑:这里需要技巧的部分是在一个数组中包含不带
nan
s的列表/数组,在另一个数组中包含与nan
s对应的元素,反之亦然。虽然这当然可以通过操纵数组来完成,但我确信有一种清晰而不过于复杂的方法可以用pythonic的方式来完成。对于建议的复制,人们接受的答案让你走了一半。既然您已经在使用Numpy,就应该将它们制作成Numpy数组。然后您应该生成一个索引表达式,然后使用它对这两个数组进行索引。这里索引将是一个相同形状的bool
的新数组,其中每个元素True
iff不是(x中的各个元素是nan
,或者y中的各个元素是nan
):
值得注意的是,这适用于任意两个形状相同的阵列
另外,如果您知道操作数数组中的元素类型是布尔型的,就像这里从
isnan
返回的数组一样,您可以使用
而不是logical\u not
和
而不是logical\u或:索引=~(np.isnan(x)| np.isnan(y))
我认为推荐的方法是使用numpy的布尔运算符:numpy.logical\u not
和numpy.logical\u和
以及numpy.isnan
。清晰、简单且解释清楚。它是有效的。谢谢@也许是Bort,但是isnan
已经返回布尔值,所以~
和|
也可以工作。@AnttiHaapala因为许多matlab人员认为~|是逻辑运算符,但在numpy中它们是位运算符,所以经常会产生令人困惑的错误。这就是为什么我添加了我的评论并对你的解决方案进行了投票。
>>> x
array([ 1., 2., nan, 4., 5., 6.])
>>> y
array([ 1., nan, 3., nan, 5., 6.])
>>> indices = np.logical_not(np.logical_or(np.isnan(x), np.isnan(y)))
>>> x = x[indices]
>>> y = y[indices]
>>> x
array([ 1., 5., 6.])
>>> y
array([ 1., 5., 6.])