Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除两个相同长度数组中的nan和相应元素_Python_Arrays_Python 3.x_Numpy - Fatal编程技术网

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.])