检查 `numpy.array` 中是否有任何值是 `None`

时间:2021-05-13 10:45:44

标签: numpy-ndarray

我有一个 2D numpy.array,它应该作为另一个的索引,所以它应该只包含 intbool。是否有一种快速而优雅的(一行)方法来检查这种情况?

我尝试了以下代码,但它没有提供所需的输出,因为它只检查 0s 而不是 Nones,这是在我的情况下存在的值:

示例 1:

a = np.array([[1, 2, 3], [3, 4, 5]])
np.all(type(a) == np.int64, axis=0)

电流输出 1:

False

示例 2:

b = np.array([[1, 2, None], [3, 4, 5]])
np.all(type(a) == np.int64, axis=0)

电流输出 2:

False

所以在第一个例子中我想得到 True 作为输出,因为这个数组的所有值都是数字,而在例子 2 - 我想得到假,因为有一个None 值出现在 b 数组的第一行。 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这应该有效:

(b == None).any()

如果 b 的任何元素是 None,则返回 true。

请注意,对于任何 numpy 数组 type(a)<class 'numpy.ndarray'> 将返回 a。这就是为什么无论 None 是否存在,您的支票总是返回 False。

您应该检查 a.dtype 以获取数据类型。也就是说,任何包含 None 或字符串的数组在 numpy 中都是 object 类型。

示例:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
a.dtype
# dtype('int64')
type(a)
# <class 'numpy.ndarray'>
(a == None).any()
# False

b = np.array([[1, 2, None], [3, 4, 5]])
b.dtype
# dtype('O')
type(b)
# <class 'numpy.ndarray'>
(b == None).any()
# True
(b == None).any(axis = 0)
# array([False, False,  True])
(b == None).any(axis = 1)
# array([ True, False])
相关问题