如何判断一个numpy数组是否包含整数?

47 投票
6 回答
33928 浏览
提问于 2025-04-15 11:58

我知道这个问题有个简单的解决办法,但现在找不到。

给定一个numpy数组,我需要知道这个数组里是否包含整数。

单单检查数据类型是不够的,因为有很多种整数类型(比如int8、int16、int32、int64等等)。

6 个回答

11

这个方法也可以用:

  n.dtype('int8').kind == 'i'
30

检查一个数字是否是整数时,对于像 4. 这样的浮点数是无效的。更好的方法是使用 np.equal(np.mod(x, 1), 0),就像下面这样:

>>> import numpy as np
>>> def isinteger(x):
...     return np.equal(np.mod(x, 1), 0)
... 
>>> foo = np.array([0., 1.5, 1.])
>>> bar = np.array([-5,  1,  2,  3, -4, -2,  0,  1,  0,  0, -1,  1])
>>> isinteger(foo)
array([ True, False,  True], dtype=bool)
>>> isinteger(bar)
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
    True,  True,  True], dtype=bool)
>>> isinteger(1.5)
False
>>> isinteger(1.)
True
>>> isinteger(1)
True
57

numpy书中找到了这个内容!第23页:

层级中的其他类型定义了特定的类型类别。 这些类别可以帮助我们测试通过self.dtype.type返回的对象是否属于某个特定的类(可以使用issubclass来检查)。

issubclass(n.dtype('int8').type, n.integer)
>>> True
issubclass(n.dtype('int16').type, n.integer)
>>> True

撰写回答