NumPy学习1
NumPy 是 Numerical Python 的缩写,它是一个由多维数组对象(ndarray)和处理这些数组的函数(function)集合组成的库。
使用 NumPy 库,可以对数组执行数学运算和相关逻辑运算。
NumPy 不仅作为 Python 的扩展包,它同样也是 Python 科学计算的基础包。
NumPy使用需求
随着数据科学(Data Science,简称 DS,包括大数据分析与处理、大数据存储、数据抓取等分支)的蓬勃发展,
像 NumPy、SciPy(Python科学计算库)、Pandas(基于NumPy的数据处理库)等数据分析库都有了大量的增长,它们都具有较简单的语法格式。
在矩阵乘法与数组形状处理上,NumPy 有着非常不错的性能,再加上 NumPy 的计算速度很快,这些都是 NumPy 成为一款数据分析工具的重要原因。
数组形状可以理解为数组的维度,比如一维数组、二维数组、三维数组等;以二维数组为例,改变数组形状就是交换数组的行和列,也即将数组旋转 90 度。
NumPy 可以很便捷高效地处理大量数据,那么使用 NumPy 做数据处理有哪些优点呢?总结如下:
NumPy 是 Python 科学计算基础库;
NumPy 可以对数组进行高效的数学运算;
NumPy 的 ndarray 对象可以用来构建多维数组;
NumPy 能够执行傅立叶变换与重塑多维数组形状;
NumPy 提供了线性代数,以及随机数生成的内置函数。
NumPy应用场景
NumPy 通常与 SciPy(Python科学计算库)和 Matplotlib(Python绘图库)等软件包组合使用,这种组合方式被用来广泛地代替 MatLab 的使用。
MatLab 是一款强大的数学计算软件,广泛应用在数据分析、电子通信、深度学习、图像处理、机器视觉、量化金融等领域,
但近些年随着 Python 语言的迅猛发展,Python 被看作是一种更适合代替 MatLab 的编程语言。
numpy_test1.py :
import numpy import numpy as np ''' 0, NumPy下载与安装 pip install numpy ''' ''' 1, NumPy ndarray对象 NumPy 定义了一个 n 维数组对象,简称 ndarray 对象,它是一个一系列相同类型元素组成的数组集合。 数组中的每个元素都占有大小相同的内存块,您可以使用索引或切片的方式获取数组中的每个元素。 ndarray 对象有一个 dtype 属性,该属性用来描述元素的数据类型 。 ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列, 常用的布局方式有两种,即按行或者按列。 ''' ''' 1) 创建ndarray对象 通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下: numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0) 下面表格对其参数做了说明: 参数说明 序号 参数 描述说明 1 object 表示一个数组序列。 2 dtype 可选参数,通过它可以更改数组的数据类型。 3 copy 可选参数,表示数组能否被复制,默认是 True。 4 order 以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)。 5 ndmin 用于指定数组的维度。 ''' print("----创建ndarray对象----") # 使用列表构建一维数组 a1 = numpy.array([1, 2, 3, 4, 5, 6]) print(a1) # [1 2 3 4 5 6] print(type(a1)) # <class 'numpy.ndarray'> ndarray数组类型 # 创建多维数组 b1 = numpy.array([[1, 2, 3, 4], [5, 6, 7, 8]]) print(b1) ''' [[1 2 3 4] [5 6 7 8]] ''' # 如果要改变数组元素的数据类型,可以使用通过设置 dtype c1 = numpy.array([1, 3, 4, 7], dtype="float32") print(c1) # [1. 3. 4. 7.] ''' 2) ndim 查看数组维数 ''' print("----ndim 查看数组维数----") arr1 = numpy.array([[1, 2, 3, 4], [9, 10, 11, 13]]) print(arr1.ndim) # 也可以使用 ndmin 参数创建不同维度的数组 arr2 = numpy.array([1, 2, 3, 4], ndmin=2) print(arr2) ''' 3) reshape数组变维 数组的形状指的是多维数组的行数和列数。Numpy 模块提供 reshape(i, j) 函数可以改变多维数组行数i和列数j, 从而达到数组变维的目的。因此数组变维即对数组形状的重塑。 2 × 3 --reshape函数数组变维-> 3 × 2 -- numpy 一般取别名 np import numpy as np ''' print("----reshape数组变维----") e1 = np.array([[1, 3], [2, 4], [3, 6]]) # 3行2列 print("原数组", e1) #变维 2行3列,并不是矩阵的转置方式变维,而是下面最近的数据往上移动变维. e2 = e1.reshape(2, 3) print("新数组", e2) ''' 原数组 [[1 3] [2 4] [3 6]] 新数组 [[1 3 2] [4 3 6]] ''' e3 = np.array([[1, 3, 4, 5], [2, 4, 6, 7], [3, 6, 9, 8]]) # 3行4列 print("原数组", e3) #变维 4行3列,并不是矩阵的转置方式变维,而是上面最后的数据往下移动变维. e4 = e3.reshape(4, 3) print("新数组", e4) ''' 原数组 [[1 3 4 5] [2 4 6 7] [3 6 9 8]] 新数组 [[1 3 4] [5 2 4] [6 7 3] [6 9 8]] ''' ''' 2, NumPy数据类型 NumPy 作为 Python 的扩展包,它提供了比 Python 更加丰富的数据类型,如下所示: NumPy数据类型 序号 数据类型 语言描述 1 bool_ 布尔型数据类型(True 或者 False) 2 int_ 默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64 3 intc 和 C 语言的 int 类型一样,一般是 int32 或 int 64 4 intp 用于索引的整数类型(类似于 C 的 ssize_t,通常为 int32 或 int64) 5 int8 代表与1字节相同的8位整数。值的范围是-128到127。 6 int16 代表 2 字节(16位)的整数。范围是-32768至32767。 7 int32 代表 4 字节(32位)整数。范围是-2147483648至2147483647。 8 int64 表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807。 9 uint8 代表1字节(8位)无符号整数。 10 uint16 2 字节(16位)无符号整数。 11 uint32 4 字节(32位)的无符号整数。 12 uint64 8 字节(64位)的无符号整数。 13 float_ float64 类型的简写。 14 float16 半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位。 15 float32 单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位。 16 float64 双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位。 17 complex_ 复数类型,与 complex128 类型相同。 18 complex64 表示实部和虚部共享 32 位的复数。 19 complex128 表示实部和虚部共享 64 位的复数。 20 str_ 表示字符串类型 21 string_ 表示字节串类型 1) 数据类型对象 数据类型对象(Data Type Object)又称 dtype 对象,主要用来描述数组元素的数据类型、大小以及字节顺序。 同时,它也可以用来创建结构化数据。比如常见的 int32、float32、uint8 都是 dtype 对象的实例,其语法格式如下: np.dtype(object) ''' print("----数据类型对象----") a1 = np.dtype(np.int32) print(a1) ''' 2) 数据类型标识码 NumPy 中每种数据类型都有一个唯一标识的字符码,如下所示: 数据类型标识码 字符 对应类型 b 代表布尔型 i 带符号整型 u 无符号整型 f 浮点型 c 复数浮点型 m 时间间隔(timedelta) M datatime(日期时间) O Python对象 S,a 字节串(S)与字符串(a) U Unicode V 原始数据(void) ''' print("----数据类型标识码----") # 使用数据类型标识码,创建一组结构化数据: # 定义字段名 nums,以及数组数据类型i1 import numpy as np dt = np.dtype([('nums','i1')]) print(dt) a1 = np.array([(55,),(75,),(85,)], dtype = dt) print(a1) print(a1.dtype) print(a1['nums']) ''' 3) 定义结构化数据 通常情况下,结构化数据使用字段的形式来描述某个对象的特征。 以下示例描述一位学生的姓名、年龄、分数的特征,该结构化数据其包含以下字段: str 字段:name int 字段:age float 字段:score ''' print("----定义结构化数据----") student_dtype = np.dtype([('name','S20'), ('age', 'i1'), ('score', 'f2')]) #输出结构化数据 student print(student_dtype) #将其应用于ndarray对象 stu_array = np.array([('zhangsan', 16, 79.50),('lisi', 18, 86.80)], dtype = student_dtype) print(stu_array) ''' [('name', 'S20'), ('age', 'i1'), ('score', '<f2')] [(b'zhangsan', 16, 79.5) (b'lisi', 18, 86.8)] ''' ''' 3, NumPy数组属性 Numpy 数组的常用属性 1) ndarray.shape shape 属性的返回值一个由数组维度构成的元组,比如 3 行 2 列的二维数组可以表示为(3,2), 该属性可以用来调整数组维度的大小。 ''' print("----NumPy数组常用属性----") print("----ndarray.shape,属性的返回值一个由数组维度构成的元组----") a1 = np.array([[1, 3], [2, 4], [3, 6]]) print("数组维度构成的元组:", a1.shape) print("原数组:", a1) # 通过 shape 属性修改数组的形状大小:功能类似 np.reshape(i,j)变维 a1.shape = (2,3) print("新数组:", a1) ''' 数组维度构成的元组: (3, 2) 原数组: [[1 3] [2 4] [3 6]] 新数组: [[1 3 2] [4 3 6]] ''' ''' 2) ndarray.ndim 该属性返回的是数组的维数 ''' print("----ndarray.ndim,该属性返回的是数组的维数----") #随机生成一个一维数组 c1 = np.arange(18) print("一维数组:",c1) print("一维数组维数:",c1.ndim) #对数组进行变维操作 e1 = c1.reshape(2,3,3) print("变维数组后:",e1) print("变维数组后维数:",e1.ndim) ''' 一维数组: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17] 一维数组维数: 1 变维数组后: [[[ 0 1 2] [ 3 4 5] [ 6 7 8]] [[ 9 10 11] [12 13 14] [15 16 17]]] 变维数组后维数: 3 ''' ''' 3) ndarray.itemsize 返回数组中每个元素的大小(以字节为单位) ''' #数据类型为int8,代表1字节 x1 = np.array([1, 3, 5], dtype = np.int8) print("ndarray.itemsize 每个元素的大小(以字节为单位):",x1.itemsize) ''' 4) ndarray.flags 返回 ndarray 数组的内存信息,比如 ndarray 数组的存储方式,以及是否是其他数组的副本等 ''' print("ndarray.flags 内存信息 :",x1.flags) ''' ndarray.flags 内存信息 : C_CONTIGUOUS : True F_CONTIGUOUS : True OWNDATA : True WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False UPDATEIFCOPY : False '''