将ndarray从float64转换为整数

时间:2012-01-13 18:46:48

标签: python numpy scipy

我在python中有ndarray dtype float64。我想将数组转换为整数数组。我该怎么做?

int()无效,因为它表示无法将其转换为标量。显然改变dtype字段本身不起作用,因为实际字节没有改变。我似乎无法在Google或文档中找到任何内容 - 最好的方法是什么?

4 个答案:

答案 0 :(得分:61)

使用.astype

>>> a = numpy.array([1, 2, 3, 4], dtype=numpy.float64)
>>> a
array([ 1.,  2.,  3.,  4.])
>>> a.astype(numpy.int64)
array([1, 2, 3, 4])

有关更多选项,请参阅documentation

答案 1 :(得分:6)

关于转换数组In-place type conversion of a NumPy array还有一个非常有用的讨论。如果您担心复制数组(这是astype()的作用),请务必查看链接。

答案 2 :(得分:6)

虽然astype可能是“最佳”选项,但还有其他几种方法可将其转换为整数数组。我在以下示例中使用此arr

>>> import numpy as np
>>> arr = np.array([1,2,3,4], dtype=float)
>>> arr
array([ 1.,  2.,  3.,  4.])

来自NumPy的int*函数

>>> np.int64(arr)
array([1, 2, 3, 4])

>>> np.int_(arr)
array([1, 2, 3, 4])

NumPy *array自身起作用:

>>> np.array(arr, dtype=int)
array([1, 2, 3, 4])

>>> np.asarray(arr, dtype=int)
array([1, 2, 3, 4])

>>> np.asanyarray(arr, dtype=int)
array([1, 2, 3, 4])

astype方法(已经提到过,但为了完整起见):

>>> arr.astype(int)
array([1, 2, 3, 4])

请注意,将int作为dtype传递给astypearray将默认为默认的整数类型,具体取决于您的平台。例如,在Windows上它将是int32,在64位Linux上使用64位Python,它是int64。如果您需要特定的整数类型并希望避免平台“歧义”,则应使用相应的NumPy类型,例如np.int32np.int64

答案 3 :(得分:1)

我用的是

void print_env(const char *env_name, const char *esc_start) {
     char * env_val = getenv(env_name);
     printf("%s%s : %s%s\n", esc_start, env_name, env_val, esc_stop);
// esc_stop could be e.g. \u001b[0m
}

就是这样