当我在布尔数组上使用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
答案 0 :(得分:3)
对我而言似乎正常。使用np.maximum
会返回g
和4
的最大值,即4
(True == 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都是标量,则返回标量。
答案 2 :(得分:1)
如果您阅读了np.maximum的文档,您知道它会比较两个数组,或者在您的情况下是一个数组和一个标量。因此,对于g的每个元素,它将返回4。
答案 3 :(得分:1)
问题是C中有两种整数类型:int
和long
,它们在32位平台上都可以是32位。 Numpy中的当前实现为两者创建了单独的标量类型。当dtype
比较大小相同时,两者的处理方式相同(dtypes
是数组内容的描述符 - 与标量类型分开)。然而,如果你直接比较标量类型,实际上会出现两个32位整数标量类型的事实。
是的,这有点令人困惑,可能会在某个时候修复。
但是,在比较int == np.int32
时,您会遇到同样的问题。正确的方法是比较dtypes
而不是标量类型。
答案 4 :(得分:0)
这很奇怪..我觉得有些奇怪的事情发生了。 我确实注意到了
h.dtype == np.int32 # True