当前位置: 首页 > news >正文

Python 从入门到实战41(NumPy数值计算)

我们的目标是:通过这一套资料学习下来,可以熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们学习了数据分析的相关基础知识。今天学习一下数据分析相关的NumPy数值计算知识。

1、NumPy简介

NumPy 模块是python 的一个第三方模块。模块中包含了大量的数值计算函数。NumPyNumerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 。

2、安装NumPy

因为是第三方库,使用前要先安装。可以使用pip的安装方式:

python -m pip install numpy –target=.\    #在当前目录安装库

如下图安装中,

对于site-packages 文件下有对应的NumPy

然后导入模块使用:

import  numpy

如例子:确认numpy 模块 正常可以使用

import numpy as np
a = np.random.random(4)  #生成随机浮点类型数组
print(a.dtype)    #查看数据类型

输出结果:float64

3、NumPy的数据类型

NumPy 支持的数据类型有很多,如下:

名称

描述

bool_

布尔型数据类型(True 或者 False

int_

默认的整数类型(类似于 C 语言中的 longint32 int64

intc

C int 类型一样,一般是 int32 int 64

intp

用于索引的整数类型(类似于 C ssize_t,一般情况下仍然是 int32 int64

int8

字节(-128 to 127

int16

整数(-32768 to 32767

int32

整数(-2147483648 to 2147483647

int64

整数(-9223372036854775808 to 9223372036854775807

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 位浮点数(实数部分和虚数部分)

numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。

类似上一个例子:

import numpy as np
a = np.random.random(4)  #生成随机浮点类型数组
print(a.dtype)    #查看数据类型

输出结果:float64

4、ndarray 数组对象

ndarray 对象是NumPy 模块的基础对象,用于存放同类型元素的多维数值

ndarray 数组中的每个元素在内存中都有相同存储大小的区域,而数据类型是由dtype()对象指定的,每个ndarray 数组只有一种dtype类型。

数组有一个重要的属性是shape,数组的维数与元素的数量就是通过shape来确定的。

数组的形状(shape)是由N个正整数组成的元组来指定的,其中元组的每个元素对应每一维的大小。

另外,数组在创建时指定大小后将不会再发生变化,而python中的列表大小是可以改变的,这是数组和列表区别较大的地方。

创建一个ndarray 数据只需要调用NumPy 的array()函数即可,语法如下:

numpy.array(object,dtype=None,copy=True,order=’K’,subok=False,ndmin=0)

对应参数说明如下:

object

表示一个数组或嵌套序列的对象

dtype

可选参数,通过它可以更改数组的数据类型---可将原来的整型或者其他类型进行强制转换

copy

可选参数,当数据源是ndarray 时表示数组能否被复制,默认是True

order

可选参数,以哪种内存布局创建数组,有3个可选值,分别是C(行序列)/F(列序列)/A(默认)

subok

可选参数,类型为bool值,默认为False。  为True,使用object的内部数据类型; 为False 使用object数组的数据类型

ndmin

可选参数,用于指定数组的最小维度--例如 一维数组、二维数组、三维数组等

实例:创建ndarray 数组对象,如使用array()函数创建一个ndarray 数组对象时,需要使用python 列表作为参数,而列表中的元素即是ndarray数组对象的元素;

arr = np.array([10,20,30,40])
print("数组的内容:",arr)   #输出数组的内容
print("数组的类型:",arr.dtype)#输出数组类型,也就是数组中元素的数据类型
print("数组的形状:",arr.shape)#输出数组的形状,元组中的每个元素对应每一维的大小
print("数组的维数:",arr.ndim)#输出数组的维数
print("数组的长度:",arr.size)#输出数组长度

输出参考:

二维数组对象:

arr1 = np.array([[1,2,3,4,5],[10,20,30,40,50]])#定义ndarray 数组对象,二维数组
print("数组的内容:",arr1)
print("数组的类型:",arr1.dtype)#输出数组类型,也就是数组中元素的数据类型
print("数组的形状:",arr1.shape)#输出数组的形状,元组中的每个元素对应每一维的大小
print("数组的维数:",arr1.ndim)#输出数组的维数
print("数组的长度:",arr1.size)#输出数组长度

输出参考:

除了以上使用的属性,还有:

属性

说明

ndarray.ndim

秩,即轴的数量或维度的数量

ndarray.shape

数组的维度,对于矩阵,n m

ndarray.size

数组元素的总个数,相当于 .shape n*m 的值

ndarray.dtype

ndarray 对象的元素类型

ndarray.itemsize

ndarray 对象中每个元素的大小,以字节为单位

ndarray.flags

ndarray 对象的内存信息

ndarray.real

ndarray元素的实部

ndarray.imag

ndarray 元素的虚部

ndarray.data

包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

5、dtype数据类型对象

数据类型对象是numpy.dtype类的实例,用来描述与数组对应的内存区域。

使用语法如下:

numpy.dtype(obj[,align,copy])

参数说明:

object ---要转换的数据类型对象

align ---如果是True,则填充字段是其类似C的结构体

copy---要复制的dtype对象,如果是False,则是对内置数据类型对象的引用

1)查看数组类型实例

例如,查看数组类型时,使用如下代码:

import numpy as np
a = np.random.random(3)  #生成随机浮点类型数组
print("浮点类型数组的数据类型:",a.dtype)    #查看数组类型
print("生成的数组为:",a)

输出:

浮点类型数组的数据类型: float64

生成的数组为: [0.87503289 0.3114382  0.02572668]

2)创建数组时指定数组类型

每个ndarray 对象都有一个相关联的dtype对象,例如需要定义一个复数数组时,可以通过数组相关联的dtype对象,指定数据的类型,代码如下:

arr1 = np.array([[1,2,3,4],[10,20,30,40]],dtype=complex)#创建复数数组
print("数组的内容:",arr1)
print("数组的类型为:",arr1.dtype)#数组的类型

输出参考:

数组的内容: [[ 1.+0.j  2.+0.j  3.+0.j  4.+0.j]

 [10.+0.j 20.+0.j 30.+0.j 40.+0.j]]

数组的类型为: complex128

今天先写学习到这里了,每天进步一点点。明天也要加油啊!


http://www.mrgr.cn/news/59867.html

相关文章:

  • 【设计模式系列】代理模式(八)
  • 【Ubuntu更换镜像源】
  • 微信支付Java+uniapp微信小程序
  • 自动化抖音点赞取消脚本批量处理
  • [机器学习]集成学习
  • SQL 与 MY SQL
  • kNN 的花式用法(原来还能这么玩 kNN)
  • Java NIO 应知应会 (一)
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发六,使用SDLVSQT显示yuv文件
  • UE ---- 射击游戏
  • 【Linux网络】传输层协议UDP与TCP
  • Mochi 1:AI视频生成领域的创新与应用
  • 绝了,这款播放器让发烧友疯狂种草,堪称音乐神器
  • 从零入门扣子Bot开发
  • Map和Set(数据结构)
  • 网络学习/复习2套接字
  • Linux基础-基础命令和相关知识4
  • 实现mysql和es的数据同步以及es的集群
  • 刷c语言练习题13(牛客网)
  • 【数据结构与算法】《Java 算法宝典:探秘从排序到回溯的奇妙世界》
  • 银河麒麟V10系统下libopenblas.so.0和libllmlmf库的安装
  • QT 实现自定义动态选择指示器
  • GPU的使用寿命可能只有1~3年
  • SpringBoot整合API接口做快递智能识别
  • 蓝桥杯普及题
  • Python实现基于WebSocket的stomp协议调试助手工具