我需要测试变量是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。
答案 0 :(得分:35)
NumPy提供了您可以/应该用于子类型检查的基类,而不是Python类型。
使用np.integer
检查有符号或无符号整数的任何实例。
使用np.signedinteger
和np.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中提供了一个有用的参考,显示了所有这些基类之间的关系。
答案 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();
}