我有一个 2D numpy.array
,它应该作为另一个的索引,所以它应该只包含 int
或 bool
。是否有一种快速而优雅的(一行)方法来检查这种情况?
我尝试了以下代码,但它没有提供所需的输出,因为它只检查 0
s 而不是 None
s,这是在我的情况下存在的值:
示例 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
数组的第一行。
感谢您的帮助。
答案 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])