如何确定一个数字是否是任何类型的int(核心或numpy,是否签名)?

时间:2016-06-09 13:04:37

标签: python numpy types

我需要测试变量是int类型,还是np.int*np.uint*中的任何一个,最好使用单个条件( ie no { {1}})。

经过一些测试后,我想:

  • or只会匹配isinstance(n, int)int(或np.int32,具体取决于平台形式),
  • np.int64似乎与所有np.issubdtype(type(n), int)int匹配,但与np.int*不匹配。

这导致两个问题:np.uint*会匹配任何类型的签名内容吗?可以在单个检查中确定一个数字是否是任何类型的有符号或无符号的int?

这是关于整数的测试,测试应该返回np.issubdtype为float-likes。

2 个答案:

答案 0 :(得分:35)

NumPy提供了您可以/应该用于子类型检查的基类,而不是Python类型。

使用np.integer检查有符号或无符号整数的任何实例。

使用np.signedintegernp.unsignedinteger检查签名类型或无符号类型。

>>> np.issubdtype(np.uint32, np.integer)
True
>>> np.issubdtype(np.uint32, np.signedinteger)
False
>>> np.issubdtype(int, np.integer)
True

所有浮动或复数类型在测试时都会返回False

np.issubdtype(np.uint*, int)始终为False,因为Python int是签名类型。

文档here中提供了一个有用的参考,显示了所有这些基类之间的关系。

enter image description here

答案 1 :(得分:3)

我建议将一组类型传递给python isinstance()内置函数。关于np.issubtype()的问题,它不匹配任何类型的有符号整数,它确定一个类是否是第二类的子类。由于所有整数类型(int8,int32等)都是int的子类,如果您将int中的任何一种类型与>>> a = np.array([100]) >>> >>> np.issubdtype(type(a[0]), int) True >>> isinstance(a[0], (int, np.uint)) True >>> b = np.array([100], dtype=uint64) >>> >>> isinstance(b[0], (int, np.uint)) True 一起传递,它将返回True。

以下是一个例子:

np.isreal()

此外,作为一种更通用的方法(当您只想匹配某些特定类型时不合适),您可以使用>>> np.isreal(a[0]) True >>> np.isreal(b[0]) True >>> np.isreal(2.4) # This might not be the result you want True >>> np.isreal(2.4j) False

public static byte[] StringToByteArray(string hex)
{
    return Enumerable.Range(0, hex.Length)
        .Where(x => x % 2 == 0)
        .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
        .ToArray();
}