尝试使用映射直接映射到数组,但没有用。
#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]])
#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数组,则可以将asarray
与dtype=int
结合使用,而不是astype
:正确的dtype,asarray
避免了数组复制,而astype
则不这样做(除非您指定copy=False
):
评论
只需确保您的数组中没有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