返回类型为numpy.minimum()?

当我在布尔数组上使用
numpy
函数
minimum()
maximum()
时,结果的类型打印为
numpy.int32
。然而,与
numpy.int32
类型的比较失败(即使在演员之后)。这是一个错误吗?
g = np.ones((5, 5), dtype = np.bool)
h = np.maximum(g, 4)
i = np.int32(h)

print 'type of g ', g.dtype.type   # prints <type 'numpy.bool_'>
print 'type of h ', h.dtype.type   # prints <type 'numpy.int32'>
print 'type of i ', i.dtype.type   # prints <type 'numpy.int32'>

print h.dtype.type == i.dtype.type # prints True
print h.dtype.type == np.int32     # prints False
print i.dtype.type == np.int32     # prints False
print i.dtype.type == np.bool_     # prints False
    
已邀请:
对我来说似乎很正常。使用
np.maximum
返回最大值
g
4
,即
4
True == 1
)。你得到一个四分之一的矩阵,它是整数类型。 如果您使用此语法进行类型比较,它们的工作方式为:
h.dtype.type == np.dtype(np.int32)
或更简单
h.dtype == np.int32
。     
返回类型是一个数组: numpy.minimum(x1,x2 [,out]) 元素最小的数组元素。 比较两个数组并返回一个包含元素最小值的新数组。如果被比较的元素之一是nan,则返回该元素。如果两个元素都是nans,则返回第一个元素。后者的区别对于复杂的nans是重要的,复杂的nans被定义为实部或虚部中的至少一个是nan。净效应是nans传播。 参数: x1,x2:array_like 包含要比较的元素的数组。它们必须具有相同的形状,或者可以广播为单一形状的形状。 退货: y:{ndarray,scalar} 元素的x1和x2的最小值。如果x1和x2都是标量,则返回标量。 来自:http://docs.scipy.org/doc/numpy/reference/generated/numpy.minimum.html?highlight=minimum#numpy.minimum     
如果您阅读np.maximum的文档,您知道它会比较两个数组,或者在您的情况下是一个数组和一个标量。因此,对于g的每个元素,它将返回4。     
问题是C中有两种整数类型:
int
long
,它们在32位平台上都可以是32位。 Numpy中的当前实现为两者创建了单独的标量类型。当它们具有相同的大小时,两者在
dtype
比较中被处理相同(
dtypes
是数组内容的描述符 - 与标量类型分开)。然而,如果你直接比较标量类型,实际上存在两个32位整数标量类型的事实。 是的,它有点令人困惑,可能会在某个时候修复。 但是,比较
int == np.int32
时会遇到同样的问题。正确的方法是比较
dtypes
而不是标量类型。     
这很奇怪..我觉得有些奇怪的事情发生了。 我确实注意到了
h.dtype == np.int32 # True
    

要回复问题请先登录注册