如何将实际的numpy数组转换为int numpy数组?
尝试使用映射直接映射到数组,但没有用。

#1 楼

使用astype方法。

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> x.astype(int)
array([[1, 2],
       [1, 2]])


评论


只需确保您的数组中没有np.infor np.nan,因为它们会产生令人惊讶的结果。例如,np.array([np.inf])。astype(int)输出array([-9223372036854775808])。

–加勒特
15年1月22日在8:42

在我的机器上,np.array([np.inf])。astype(int),np.array([-np.inf])。astype(int)和np.array([np.nan])。astype (int)都返回相同的东西。为什么?

– BallpointBen
18年5月14日在20:47

@BallpointBen:nan和inf是浮点值,无法有意义地转换为int。如您之前的评论所述,会有令人惊讶的行为,我认为确切的行为没有明确定义。如果要将nan和inf映射到某些值,则需要自己执行。

–布伦·巴恩(BrenBarn)
18年5月15日在18:21

请注意,x.astype(int)[0] [0]的类型不是int。它是numpy.int32。

–克里斯
18年6月6日在19:34

请注意,尽管这确实将数组转换为整数,但@fhtuft的答案可能会减少意外的发生

–内森·穆索克(Nathan Musoke)
20 Apr 15'在18:07

#2 楼

一些用于控制舍入的numpy函数:rint,floor,trunc,ceil。取决于您希望如何对浮点数进行向上,向下或最接近的整数舍入。

>>> x = np.array([[1.0,2.3],[1.3,2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> y = np.trunc(x)
>>> y
array([[ 1.,  2.],
       [ 1.,  2.]])
>>> z = np.ceil(x)
>>> z
array([[ 1.,  3.],
       [ 2.,  3.]])
>>> t = np.floor(x)
>>> t
array([[ 1.,  2.],
       [ 1.,  2.]])
>>> a = np.rint(x)
>>> a
array([[ 1.,  2.],
       [ 1.,  3.]])


将其中之一转换为int或将numpy中的其他类型转换为astype(由BrenBern回答):

a.astype(int)
array([[1, 2],
       [1, 3]])

>>> y.astype(int)
array([[1, 2],
       [1, 2]])


评论


正是我想要的。 astype通常太通用,我认为在进行intx-inty转换时,它可能更有用。当我想进行float-int转换时,可以选择舍入类型是一个不错的功能。

–巴库留
2012年9月11日下午7:03

因此,将7.99999之类的近整数安全地转换为8之类的整数的最简单方法是np.rint(arr).astype(int)吗?

– Endolith
2012-10-12 18:53

用numpy的任何方式使其成为uint8?

–瑞安
18-2-6在12:47

@Ryan astype(np.uint8)

–克里斯
18年6月6日在19:28

#3 楼

您可以使用np.int_

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> np.int_(x)
array([[1, 2],
       [1, 2]])


#4 楼

如果不确定输入是否为Numpy数组,则可以将asarraydtype=int结合使用,而不是astype:正确的dtype,asarray避免了数组复制,而astype则不这样做(除非您指定copy=False):