我在python中有ndarray
dtype
float64
。我想将数组转换为整数数组。我该怎么做?
int()
无效,因为它表示无法将其转换为标量。显然改变dtype
字段本身不起作用,因为实际字节没有改变。我似乎无法在Google或文档中找到任何内容 - 最好的方法是什么?
答案 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.])
int*
函数>>> np.int64(arr)
array([1, 2, 3, 4])
>>> np.int_(arr)
array([1, 2, 3, 4])
*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传递给astype
或array
将默认为默认的整数类型,具体取决于您的平台。例如,在Windows上它将是int32
,在64位Linux上使用64位Python,它是int64
。如果您需要特定的整数类型并希望避免平台“歧义”,则应使用相应的NumPy类型,例如np.int32
或np.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
}
就是这样