如何判断一个numpy数组是否包含整数?
我知道这个问题有个简单的解决办法,但现在找不到。
给定一个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