python - 删除两个等长数组中nan AND对应的元素

标签 python arrays python-3.x numpy

我有两个相同长度的列表,我可以将它们转换成数组来使用 numpy.stats.pearsonr方法。现在,这些列表中的一些元素是 nan,因此不能用于该方法。在我的例子中,最好的办法是删除那些元素,以及另一个列表中的相应元素。有没有一种实用且pythonic的方法来做到这一点? 示例:我有

[1 2 nan 4 5 6 ][1 nan 3 nan 5 6]

最后我需要

[1 5 6 ]

[1 5 6 ]

(这里的数字代表位置/指数,而不是我正在处理的实际数字)。编辑:这里棘手的部分是在一个数组中同时包含没有 nan 的列表/数组,在另一个数组中包含对应于 nan 的元素,反之亦然。虽然它肯定可以通过操纵数组来完成,但我相信有一种清晰且不过分复杂的方法可以用 Pythonic 方式来完成。

最佳答案

已接受的建议重复答案让您完成了一半。由于您已经在使用 Numpy,因此您应该将它们制作成 numpy 数组。然后你应该生成一个索引表达式,然后用它来索引这两个数组。这里的索引将是一个新的 bool 数组,形状相同,其中每个元素都是 True iff 不是(x 中的相应元素是 nan 或相应元素在 y 中是 nan):

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

值得注意的是,这适用于任何 2 个相同形状的阵列。

P.S.,如果你知道操作数数组中的元素类型是 bool 值,就像这里从 isnan 返回的数组一样,你可以使用 ~ 而不是logical_not| 而不是 logical_or:indices = ~(np.isnan(x) | np.isnan(y))

关于python - 删除两个等长数组中nan AND对应的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37540782/

相关文章:

python - Django-parler:类型对象 'BookImage' 没有属性 '_parler_meta'

python - 如何通过从所有其他列中减去第一列来创建新的数据框?

java - 读取jar文件中的目录

python - 可视化代码覆盖率结果的好方法

python - Django - 如何从数据库表中提取登录的用户数据?

python - 使用 Python 删除矩阵中的第 n 行或第 n 列

c++ - 动态分配的结构数组 : Assignment Issues (C++)

python - 哪个效率更高 : Python docstrings or type-hints?

algorithm - 合并两个排序的链表

python-3.x - 带有站点包的 Python 3 virtualenv 不会引导 pip