numpy常用的函数和属性
函数
语法:numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
- object:任何暴露数组接口方法的对象,通常是列表或元组。
- dtype:数组的所需数据类型,可选。
- copy:默认为
True
,意味着创建对象的副本。如果设置为False
,则尝试使用原始对象。 - order:{'C', 'F', 'A', 'K'},指定数组的内存布局。'C'代表C语言风格,'F'代表Fortran风格,'A'代表'F'如果原数组是Fortran连续的,否则是'C','K'代表尽可能保持原数组的内存布局。
- subok:默认为
False
,返回一个基本类型数组。如果为True
,则返回子类。 - ndmin:指定返回数组的最小维度。默认是根据列表、元组情况而定
示例
1. 列表转化ndarray对象
import numpy as np list1 = [1, 2, 3, 4] arr1 = np.array(list1) print(arr1) # 输出: [1 2 3 4]
2. 指定数据类型
记得有默认值
3. 多维数组
列表有逗号,ndarray没有哦
4. 最小维度
因为指定nmid为2,即使列表是一维也是会转化为2维的
5. 是否copy
list1 = [1, 2, 3, 4, 5]
arr5 = np.array(list1, copy=False)
print(list1)
list1[0] = 10
print(arr5) # 没有影响
print(list1)
print()
list1 = [1, 2, 3, 4, 5]
arr5 = np.array(list1, copy=True)
print(list1)
list1[0] = 10
print(arr5)
print(list1)
print()
arr6 = np.array(arr5, copy=False)
arr5[0] = 88
print(arr5)
print(arr6)
print()
print(arr6)
arr7 = np.array(arr6, copy=True)
arr6[0] = 188
print(arr6)
print(arr7)
从测试结果看,copy属性对列表转ndarray没有影响,ndarry转ndarray有影响
numpy.dtype(obj, align=False, copy=False)
在NumPy中,dtype
(数据类型)是一个对象,它描述了数组中元素的数据类型。每个NumPy数组都有一个dtype
属性,用于定义其元素的数据类型。dtype
不仅包含基本的类型信息(如float
、int
等),还可以描述更复杂的数据结构,比如结构化数据类型
- obj:用于定义数据类型的对象。可以是字符串、Python类型(如
float
)、另一个dtype
对象,或者是表示字段的字典或元组列表。 - align:如果为
True
,则字段将按C语言结构体的方式进行字节对齐。 - copy:如果为
True
,则创建dtype
对象的副本。
示例
1. 基本数据类型
2. 使用字符串定义数据类型
3. 更复杂的结构化数据类型
4.使用元组定义数据类型(带有字段名)
i1表示是1个字节的int
f4表示是4个字节 的float
ChatGPT
在NumPy中,dtype
(数据类型)是一个对象,它描述了数组中元素的数据类型。每个NumPy数组都有一个dtype
属性,用于定义其元素的数据类型。dtype
不仅包含基本的类型信息(如float
、int
等),还可以描述更复杂的数据结构,比如结构化数据类型。
语法 numpy.dtype(obj, align=False, copy=False)
dtype
的基本语法如下:
numpy.dtype(obj, align=False, copy=False)
- obj:用于定义数据类型的对象。可以是字符串(如
'float32'
)、Python类型(如float
)、另一个dtype
对象,或者是表示字段的字典或元组列表。 - align:如果为
True
,则字段将按C语言结构体的方式进行字节对齐。 - copy:如果为
True
,则创建dtype
对象的副本。
示例
-
基本数据类型
pythonimport numpy as np dtype_float = np.dtype(np.float32) print(dtype_float) # 输出: float32
-
使用字符串定义数据类型
pythondtype_int = np.dtype('int') print(dtype_int) # 输出: int32 或 int64 取决于系统
-
更复杂的结构化数据类型
pythondtype_complex = np.dtype([('real', np.float32), ('imag', np.float32)]) print(dtype_complex) # 输出: [('real', '<f4'), ('imag', '<f4')]
-
使用元组定义数据类型(带有字段名)
pythondtype_structured = np.dtype([('age', np.int8), ('height', np.float32)]) print(dtype_structured) # 输出: [('age', 'i1'), ('height', '<f4')]
最佳实践
- 明确数据类型:在创建数组时,最好明确指定
dtype
,特别是在性能和精度方面有特定要求的情况下。 - 使用结构化数据类型:当需要在数组中存储复合数据(例如表格数据)时,可以使用结构化数据类型。
- 内存优化:根据数据的范围选择合适的数据类型,以节省内存。例如,如果数据的范围在0到255之间,使用
np.uint8
。 - 类型转换:了解如何在不同的数据类型之间转换,这对于处理外部数据和进行数值运算非常重要。
属性
dtype
(数据类型)
1. 布尔型
bool_
:布尔值,True 或 False。
2. 整型
int_
:默认的整数类型(类似于C中的long
;通常是int64
或int32
)。intc
:C语言中的int
类型,通常是int32
或int64
。intp
:用于索引的整数类型(类似于C中的ssize_t
;通常是int32
或int64
)。int8
,int16
,int32
,int64
:分别代表8位、16位、32位、64位整数。
3. 无符号整型
uint8
,uint16
,uint32
,uint64
:分别代表8位、16位、32位、64位无符号整数。
4. 浮点型
float_
:默认的浮点类型(类似于C中的double
;通常是float64
)。float16
,float32
,float64
:分别代表16位、32位、64位浮点数。
5. 复数型
complex_
:默认的复数类型(类似于C中的double
组成的复数;通常是complex128
)。complex64
,complex128
:分别代表由两个32位浮点数(实部和虚部)和两个64位浮点数组成的复数。
6. 对象类型
object_
:表示Python对象类型。这种类型用于存储任意Python对象,但通常在需要数组元素为多种类型或包含复杂对象时使用。
7. 字符串类型
string_
:表示固定长度的字符串类型,每个字符占用一个字节。例如,string_[n]
表示长度为n的字符串。unicode_
:表示固定长度的Unicode类型(在Python 3中,等同于str
类型)。例如,unicode_[n]
表示长度为n的Unicode字符串。
8. 时间类型
datetime64
:表示日期和时间的类型。timedelta64
:表示时间差(两个datetime64
类型数据之间的差)。
9. 其他类型
bytes_
:固定长度的字节序列。void
:表示空(无数据)的类型,通常用于表示结构化数组的元素。
import numpy as np # 布尔型 arr_bool = np.array([True, False, True], dtype=np.bool_) print(arr_bool) # 整型 arr_int32 = np.array([1, 2, 3], dtype=np.int32) print(arr_int32) # 无符号整型 arr_uint8 = np.array([1, 2, 3], dtype=np.uint8) print(arr_uint8) # 浮点型 arr_float64 = np.array([1.0, 2.0, 3.0], dtype=np.float64) print(arr_float64) # 复数型 arr_complex128 = np.array([1+2j, 3+4j, 5+6j], dtype=np.complex128) print(arr_complex128) # 对象类型 arr_object = np.array([1, 'a', True], dtype=np.object_) print(arr_object) # 字符串类型 arr_string = np.array(['apple', 'banana', 'cherry'], dtype=np.string_) print(arr_string) # Unicode类型 arr_unicode = np.array(['apple', 'banana', 'cherry'], dtype=np.unicode_) print(arr_unicode) # 时间类型 arr_datetime = np.array(['2021-01-01', '2021-01-02'], dtype='datetime64') print(arr_datetime) # 时间差类型 arr_timedelta = np.array([np.datetime64('2021-01-01') - np.datetime64('2020-01-01')], dtype='timedelta64') print(arr_timedelta) # 字节类型 arr_bytes = np.array([b'abc', b'def'], dtype=np.bytes_) print(arr_bytes) # 创建结构化数组 arr_void = np.array([(1, 'a', 0.5)], dtype=[('x', 'i4'), ('y', 'S1'), ('z', 'f4')]) print(arr_void)
- 明确地指定
dtype
可以确保数据的一致性和预期行为,尤其是在涉及数值计算时。 - 选择合适的
dtype
以优化性能和内存使用。例如,对于只需要小整数的情况,使用int8
或uint8
比默认的int64
更节省内存。 - 对于复杂计算,使用高精度的数据类型(如
float64
或complex128
)以提高计算精度,但需注意这会增加内存消耗。 - 当处理大型数据集时,合理选择数据类型对于内存管理和性能优化至关重要
- 使用
object_
类型时需谨慎,因为它会牺牲NumPy数组的许多优点,如高效的内存使用和快速的数学运算。 - 对于文本数据,明确区分
string_
和unicode_
类型,特别是在处理非英文字符时。 - 日期和时间数据类型,如
datetime64
和timedelta64
,非常适合处理时间序列数据。
ndarray
函数