【问题标题】:Find if array of arrays contains more than 1 nan element?查找数组数组是否包含超过 1 个 nan 元素?
【发布时间】:2022-01-19 10:37:45
【问题描述】:

我想查找 conf_int_arr 是否有超过 1 个 [nan, nan] 数组,我该怎么做?

conf_int_arr = [array([nan, nan]),
 array([39.49, 57.08]),
 array([nan, nan]),
 array([nan, nan])]

我搜索了解决方案,但这不起作用。

np.where(conf_int_arr != conf_int_arr.round())

【问题讨论】:

  • 你有 numpy 数组的列表吗?还是你有一个 2D numpy 数组?
  • 它由数组组成

标签: python arrays


【解决方案1】:

您可以简单地将列表转换为 numpy 数组,然后计算仅包含 nan 值的行:

import numpy as np

conf_int_arr = [np.array([np.nan, np.nan]),
 np.array([39.49, 57.08]),
 np.array([np.nan, np.nan]),
 np.array([np.nan, np.nan])]

conf_int_arr = np.array(conf_int_arr)
result = np.isnan(conf_int_arr).all(axis=1).sum()

print(result)

输出:

3

【讨论】:

  • 我收到了这个错误 array() 参数 1 必须是 unicode 字符,而不是列表
  • 现在应该可以工作了。
  • 非常感谢 :)
【解决方案2】:

我不确定这是否是最有效的方法,但它确实有效。

import numpy as np


conf_int_arr = [
    np.array([np.nan, np.nan]),
    np.array([39.49, 57.08]),
    np.array([np.nan, np.nan]),
    np.array([np.nan, np.nan]),
]
nan_array = np.array([np.nan, np.nan])
print(np.sum([np.array_equal(each_array, nan_array, equal_nan=True) for each_array in conf_int_arr]))

【讨论】:

  • 我收到了这个错误 array() 参数 1 必须是 unicode 字符,而不是列表
  • 请查看更新后的解决方案
猜你喜欢
  • 1970-01-01
  • 2016-10-13
  • 2012-08-05
  • 2023-03-18
  • 1970-01-01
  • 2021-12-30
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多