3

当我使用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
4

5 回答 5

3

对我来说似乎很正常。Usingnp.maximum返回 和 的最大值g44( True == 1)。你得到一个满是四的矩阵,它整数类型。

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

于 2011-04-07T14:40:23.557 回答
2

返回类型是一个数组

numpy.minimum(x1, x2[, out])

数组元素的元素最小值。

比较两个数组并返回一个包含元素最小值的新数组。如果要比较的元素之一是 nan,则返回该元素。如果两个元素都是 nans,则返回第一个。后一种区别对于复杂的 nan 很重要,复杂的 nan 被定义为实部或虚部中的至少一个是 nan。最终效果是传播了 nan。

参数:
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

于 2011-04-07T14:39:20.377 回答
1

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

于 2011-04-07T14:40:01.640 回答
1

int问题是 C:和中有两种整数类型long,它们在 32 位平台上都可以是 32 位的。Numpy 中的当前实现为两者创建了一个单独的标量类型。dtype当它们大小相同时,两者在比较中被视为相同(dtypes是数组内容的描述符 - 与标量类型分开)。尽管如此,如果您直接比较标量类型,就会发现实际上有两个 32 位整数标量类型。

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

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

于 2011-04-08T08:50:37.983 回答
0

这很奇怪..我认为发生了一些奇怪的事情。我确实注意到了

h.dtype == np.int32 # True

于 2011-04-07T14:53:43.833 回答