返回类型为numpy.minimum()?

时间:2011-04-07 14:32:25

标签: python types numpy int32

当我在布尔数组上使用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

5 个答案:

答案 0 :(得分:3)

对我而言似乎正常。使用np.maximum会返回g4的最大值,即4True == 1)。你得到一个四分之一的矩阵,其中整数类型。

如果您使用此语法进行类型比较,它们的工作方式为:h.dtype.type == np.dtype(np.int32)或更简单h.dtype == np.int32

答案 1 :(得分:2)

返回类型是数组

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

答案 2 :(得分:1)

如果您阅读了np.maximum的文档,您知道它会比较两个数组,或者在您的情况下是一个数组和一个标量。因此,对于g的每个元素,它将返回4。

答案 3 :(得分:1)

问题是C中有两种整数类型:intlong,它们在32位平台上都可以是32位。 Numpy中的当前实现为两者创建了单独的标量类型。当dtype比较大小相同时,两者的处理方式相同(dtypes是数组内容的描述符 - 与标量类型分开)。然而,如果你直接比较标量类型,实际上会出现两个32位整数标量类型的事实。

是的,这有点令人困惑,可能会在某个时候修复。

但是,在比较int == np.int32时,您会遇到同样的问题。正确的方法是比较dtypes而不是标量类型。

答案 4 :(得分:0)

这很奇怪..我觉得有些奇怪的事情发生了。 我确实注意到了

h.dtype == np.int32 # True