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

نوع البيانات في NumPy

شرح أنواع بيانات NumPy و أمثلة

نوع البيانات، أي dtype، وهو كائن خاص يحتوي على معلومات عن قطعة الذاكرة التي يجب أن تُستخدم من أجل نوع بيانات معين لـ ndarray (وذلك يُعرف أيضًا بمعلومات البيانات، وهي تمثل البيانات نفسها). dtype هو السبب في أن NumPy يمكنه التفاعل بسهولة مع أنظمة بيانات أخرى. عادةً، يقدم النظام الآخر قرصًا أو ذاكرة ومطابقة للبيانات، مما يجعل من السهل جدًا قراءة وكتابة البيانات باستخدام لغات البرمجة مثل C أو Fortran.

أنواع البيانات التي يدعمها NumPy أكثر أنواع البيانات المدمجة في Pythonالكثير جداً، يمكن أن يتم مطابقة أنواع البيانات في لغة C تقريباً، وبعض الأنواع يتم مطابقتها بأنواع بناة Python الداخلية. الجدول أدناه يلخص الأنواع الأساسية لـ NumPy.

الاسمالوصف
int_نوع عدد صحيح الافتراضي (مثل long في لغة C، عادة ما يكون int32 أو int64)
int8بتيه (-128 إلى 127)
int16عدد صحيح (-32768 إلى 32767)
int32عدد صحيح (-2147483648 إلى 2147483647)
int64عدد صحيح (-9223372036854775808 إلى 9223372036854775807)
intcمثل نوع int في C، عادة ما يكون int32 أو int64
intpنوع عدد صحيح يستخدم للإشارة (مثل ssize_t في C، عادة ما يكون int32 أو int64)
uint8عدد صحيح غير سالب (من 0 إلى 255)
uint16عدد صحيح غير سالب (من 0 إلى 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.int32,np.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,)], dtype = a)
>>> print(arr)
[(1,) (2,) (3,)]
>>> print(arr['number'])  # 类型字段名可以用于存取实际的 number 列
[1 2 3]

下面的示例定义一个结构化数据类型animal,包含字符串字段 name,整数字段 age,及浮点字段 marks,并将这个 dtype 应用到 ndarray 对象。

>>> import numpy as np
>>> animal = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
>>> print(animal)
[('name', 'S20'), ('age', 'i1'), ('marks', 'f4')]
                                <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.]
الاشارة:}يمكن تحويل عدد النص إلى عدد، ولكن عند النوع الفlot يجب تحويله إلى float وليس int.

يمكن أيضًا استخدام dtype من arrays أخرى لتحويل نوع البيانات، مثل المثال التالي:

>>> 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نوع الفlot
cمركب -النوع الفlot
mtimedelta (فترة -وقت)
Mdatetime (تاريخ -وقت)
O(OBJECT -PYTHON)
S, a(STRING -STRING)
UUnicode
Vبيانات الأصل (void)