gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:46:43 24 4
gpt4 key购买 nike

我有两个相同长度的列表,我可以将它们转换成数组来使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com