English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NumPy 데이터 타입

NumPy 데이터 타입 설명 및 예제

데이터 타입, 즉 dtype,는 특별한 객체이며 ndarray가 특정 데이터 타입에 대한 메모리 블록 정보를 포함하고 있습니다(이를 메타데이터라고도 합니다. 데이터를 나타내는 데이터). dtype는 NumPy가 다른 시스템과 데이터를 유연하게 상호작용할 수 있는 이유입니다. 일반적으로 다른 시스템은 하드디스크나 메모리와 데이터의 대응 관계를 제공하여 C나 Fortran과 같은 하위 언어로 데이터를 읽고 쓰는 것을 매우 쉽게 합니다.

NumPy가 지원하는 데이터 타입은 더 많습니다. Python 내장 데이터 타입많이 많습니다. 일반적으로 C 언어의 데이터 타입과 일치하며, 일부 타입은 Python 내장 타입과 일치합니다. 다음 표는 일반 NumPy 기본 타입을 나열합니다.

이름설명
int_기본 정수 타입(类似于 C 언어의 long, int와 동일합니다)32 또는 int64)
int8바이트(-128 to 127)
int16정수(-32768 to 32767)
int32정수(-2147483648 to 2147483647)
int64정수(-9223372036854775808 to 9223372036854775807)
intcC의 int 타입과 동일하며, 일반적으로 int입니다32 또는 int 64
intp인덱싱에 사용되는 정수 타입(类似于 C의 ssize_t, 일반적으로는 int입니다)32 또는 int64)
uint8없음 체 정수(0 to 255)
uint16없음 체 정수(0 to 65535)
uint32없음 체 정수(0 to 4294967295)
uint64없음 체 정수(0 to 18446744073709551615)
float_float64 타입의 약자
float16하프 프리미엄 플로팅 포인트, 포함됩니다:1 개의 부호 자리5 개의 지수 자리10 개의 소수점 자리
float32싱글 프리미엄 플로팅 포인트, 포함됩니다:1 개의 부호 자리8 개의 지수 자리23 개의 소수점 자리
float64더블 프리미엄 플로팅 포인트, 포함됩니다:1 개의 부호 자리11 개의 지수 자리52 개의 소수점 자리
complex_complex128 타입의 약자, 즉 128 비트 복소수
complex64복소수, 두 배 32 비트 실수(실수 부분과虚수 부분)
complex128복소수, 두 배 64 비트 실수(실수 부분과虚수 부분)
bool_부울 데이터 타입(True 또는 False)

NumPy의 dtype를 기억하지 못해도 괜찮습니다. 초보자에게는 더욱 그렇습니다. 일반적으로 처리하는 데이터의 유형이 실수, 복소수, 정수, 부울 값, 문자열 또는 일반 Python 객체인지만 알면 됩니다. 메모리와 디스크에서 데이터의 저장 방식을 제어해야 할 때(특히 대규모 데이터 셋에 대해)에는 저장 타입을 제어하는 방법을 알아야 합니다.

NumPy의数值형은 dtype 객체의 인스턴스이며, 고유한 문자와 일치하며, np.bool_와 np.int를 포함합니다.32np.float32등입니다.

데이터 타입 객체 (dtype)

데이터 타입 객체는 배열과 일치하는 메모리 영역이 어떻게 사용되는지 설명하는 데 사용되며, 다음과 같은 몇 가지 요소에 따라 달라집니다:

데이터의 타입 - 예를 들어, 실수, 복소수, 정수, 부울 값, 문자열 또는 Python 객체.데이터의 크기 - 예를 들어, 정수는 몇 개의 바이트를 저장합니다.데이터의 바이트 순서 - 리얼 엔드 방식 또는 리얼 엔드 방식

바이트 순서는 데이터 타입을 미리 설정한 "<" 또는 ">"에 의해 결정됩니다. "<"은 리얼 엔드 방식(최소 값이 가장 작은 주소에 저장됨, 즉 낮은 비트 그룹이 앞에 위치함)을 의미합니다. ">"은 리얼 엔드 방식(가장 중요한 바이트가 가장 작은 주소에 저장됨, 즉 높은 비트 그룹이 앞에 위치함)을 의미합니다.

dtype 객체는 다음 문법으로 구성됩니다:

 numpy.dtype(object, align, copy)

object - 要转换为的数据类型对象align - 如果为 true,填充字段使其类似 C 的结构体。copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用

实例

接下来我们可以通过实例来理解。

>>> import numpy as np
>>> a = np.dtype(np.float32)
>>> print(a)
float32
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8''代替 
>>> import numpy as np
>>> a = np.dtype('i8')]
>>> print(a)
int64

下面实例展示结构化数据类型的使用,类型字段和对应的实际类型将被创建。

>>> import numpy as np
>>> a = np.dtype([('number', np.int16)]  # 数据类型应用于 ndarray 对象 
>>> print(a)
[('number', '<i2')]
>>> arr = np.array([(1,)2,)3([(
>>> print(arr)
,)1,)2,)3>>> print(arr['number'])  # 类型字段名可以用于存取实际的 number 列
下面的示例定义一个结构化数据类型animal,包含字符串字段 name,整数字段 age,及浮点字段 marks,并将这个 dtype 应用到 ndarray 对象。
[1 2 3]

>>> import numpy as np
'), ('marks', '21')]4
[('name', '
21'), ('marks', '
                                <f4')] 
>>> a = np.array([('cat', 5, 10),(('dog', 4, 35),(('lion',8,18]), dtype = animal)
>>> print(a)
[(b'cat', 5, 10). (b'dog', 4, 35). (b'lion', 8, 18).]

使用astype方法可以显式的转换数组的数据类型,具体实例如下:

>>> import numpy as np
>>> arr = np.array([1,2,3,4,5])
>>> print(arr.dtype)
int64
>>> print(arr)
[1 2 3 4 5]
>>> float_arr = arr.astype('float32')  # 也以写作 arr.astype(np.float32)
>>> print(float_arr.dtype)
float32
>>> print(float_arr)
[1. 2. 3. 4. 5.]
주의:숫자 문자열 배열을 숫자로 변환할 수 있습니다. 실수형 숫자일 때는 float으로 변환할 수 있지만 int로 변환할 수 없습니다.

다른 배열의 dtype를 사용하여 데이터 타입을 변환할 수도 있습니다. 구체적인 예제는 다음과 같습니다:

>>> import numpy as np
>>> int_arr = np.arange(10)
>>> calibers = np.array([.22,270.,357], dtype=np.float64)
>>> print(calibers)
[0.22 0.27 0.357]
>>> arr_last = int_arr.astype(calibers.dtype)
>>> print(arr_last.dtype)
float64
>>> print(arr_last)
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

각 내장 타입은 고유한 문자 코드로 정의됩니다. 예를 들어:

문자해당 타입
b부울형
i(정의된) 정수형
u미리정의된 정수형 integer
f실수형
c가상 실수형
mtimedelta(시간 간격)
Mdatetime(날짜 시간)
O(Python) 객체
S, a(바이트-) 문자열
UUnicode
V원본 데이터 (void)