[入门教程](python numpy入门)

NumPy

NumPy是一个开源的Python科学计算基础库,包含

•一个强大的N维数组对象ndarray
•广播功能函数
•整合C/C++/Fortran代码的工具
•线性代数、傅里叶变换、随机数生成等功能

NumPy是SciPy、Pandas等数据处理或科学计算库的基础

NumPy的引用

import numpy as np

建议使用np作为引用numpy的名字,这个名字是约定俗成的,有利于别人读懂你的代码

NumPy的基础功能

学过C/C++的朋友应该知道在C/C++为我们提供了数组 这个数据类型,但是在python中基础的数据类型是没有数组的,python为我们提供了列表元组等看起来更加方便快捷的数据类型,但是在实际应用中我们还是需要数组这种数据类型的,这是为什么呢?请看下面的例子:

def pySum():a = [0,1,2,3,4]b = [9,8,7,6,5]c = []for i in range(len(a)):c.append(a[i]**2 + b[i]**3)return c
print(pySum())

上述代码是利用python基础语法实现一个数组(实际为列表)的平方和另一个数组(列表)的立方和的方法,是对列表中的元素逐一进行操作,但是大多数人的想法是让他们之间直接进行运算,让列表本身进行对应元素的运算操作而不是人为的去控制,NumPy为我们提供了能实现这一操作的数据类型–数组

N维数组对象:ndarray

Python已有列表类型,为什么需要一个数组对象(类型)?

•数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据

•设置专门的数组对象,经过优化,可以提升这类应用的运算速度
观察:科学计算中,一个维度所有数据的类型往往相同

•数组对象采用相同的数据类型,有助于节省运算和存储空间

ndarray是一个多维数组对象,由两部分构成:

•实际的数据
•描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始

创建ndarray对象

ndarray在程序中的别名是:array
我们利用np.array()生成一个ndarray数组

a = np.array([[1,2,3,4,5],[9,8,7,6,5]])
print(a)

运行结果如图所示:

由上图知 np.array() 输出成[]形式,元素由空格分割
现在我们利用ndarray来实现一下上面的实例:

import numpy as mp
def pySum():a =np.array([0,1,2,3,4])b =np.array([9,8,7,6,5])c = a**2 + b**3return cprint(pySum())

利用ndarray就可以非常直观的进行数组间的运算了

ndarray对象的属性

属性 说明
.ndim 秩,即轴的数量或维度的数量
.shape ndarray对象的尺度,对于矩阵,n行m列
.size ndarray对象元素的个数,相当于.shape中n*m的值
.dytpe ndarray对象的元素类型
.itemsize ndarray对象中每个元素的大小,以字节为单位

一一解释一下这些属性的用法和含义:
首先创建一个数组a,使用np.array()创建数组

a = np.array([[0,1,2,3,4],[5,6,7,8,9]])
a.ndim
a.shape
a.size
a.dtype
a.itemsize


ndim返回的是数组的维度,数组a有两个维度一个是[0,1,2,3,4]另一个是[5,6,7,8,9]

shape返回的是对象的尺度,几行几列,类似矩阵的行数和列数,如果你的数组每一维度上的数量不同的话,shape只会返回数组的行数不会返回列数


这里只会返回数组的行数也就是维数是三行(维)的,列数就不会显示了,因为前两个是5列,最后一个是4列

size返回数组中元素的个数,对于数组a元素个数为2*5=10

dtype是返回元素的数据类型numpy中的ndarray数组有很多种数据类型,常见的类型及描述如下:

NumPy中的基本数据类型

名称 描述
bool 用一个字节存储的布尔类型(True或False)
inti 由所在平台决定其大小的整数(一般为int32或int64)
int8 一个字节大小,-128 至 127
int16 整数,-32768 至 32767
int32 整数,-2 ** 31 至 2 ** 32 -1
int64 整数,-2 ** 63 至 2 ** 63 - 1
uint8 无符号整数,0 至 255
uint16 无符号整数,0 至 65535
uint32 无符号整数,0 至 2 ** 32 - 1
uint64 无符号整数,0 至 2 ** 64 - 1
float16 半精度浮点数:16位,正负号1位,指数5位,精度10位
float32 单精度浮点数:32位,正负号1位,指数8位,精度23位
float64或float 双精度浮点数:64位,正负号1位,指数11位,精度52位
complex64 复数,分别用两个32位浮点数表示实部和虚部
complex128或complex 复数,分别用两个64位浮点数表示实部和虚部


itemsize指的是对象中每个元素的大小,就像C语言中float型数据占4个字节

ndarray的元素类型

参照上面的表格,这里只对元素类型作一些解释
有些朋友可能会好奇为什么ndarray要支持这么多的元素类型呢?我总结了以下几点:

对比:Python语法仅支持整数、浮点数和复数3种类型
•科学计算涉及数据较多,对存储和性能都有较高要求
•对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能
•对元素类型精细定义,有助于程序员对程序规模有合理评估

非同质的ndarray对象

ndarray可以创建一个包含不同元素类型的数组,但是非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用

ndarray数组的创建

ndarray数组的常用创建方法有以下几种,下面我们来一一解释:
•从Python中的列表、元组等类型创建ndarray数组
•使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
•从字节流(raw bytes)中创建ndarray数组
•从文件中读取特定格式,创建ndarray数组

(1)从Python中的列表、元组等类型创建ndarray数组

x = np.array(list/tuple)
x = np.array(list/tuple,dtype=np.float32)

当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型

x = np.array([0,1,2,3])
print(x)
y = np.array((4,5,6,7))
print(y)
z = np.array([[1,2],[9,8],(0.1,0.2)])
print(z)


(2)使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等

函数 说明
np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n‐1
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) 根据shape生成一个数组,每个元素值都是val
np.eye(n) 创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a) 根据数组a的形状生成一个全1数组
np.zeros_like(a) 根据数组a的形状生成一个全0数组
np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val
np.ones((3,6))
np.ones((3,6),dtype = np.int32)
np.zeros((3,6),dtype = np.int32)
np.eye(5)
np.ones((2,3,4))
np.full((2,3,4),5)
a = np.linspace(1,10,4)
b = np.linspace(1,10,4,endpoint = False)
c = np.concatenate((a,b))



注意使用ones生成的数组是默认是float型的

加入dtype参数后可以指定为其他数据类型

zeros和ones的用法相同不在赘述了


默认的数据类型也是float型,主对角线为1,其余为0

这是一个多维数组可以简单的理解为数组有两大层,每一大层中有三小层,每一小层有四个元素

(3)使用NumPy中其他函数创建ndarray数组

函数 说明
np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组


endpoint的意思就是能否取到截止数据,False为不能,True为能,默认为True

ndarray数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换

a = np.ones((2,3,4),dtype=np.int32)
a.reshape((3,8)) #reshape要与shape的元素个数相同
a.resize((3,8)) #该方法和reshape功能相同但是会修改原数组
print(a)
b = np.ones((2,3,4),dtype=np.int32)
b.flatten()
print(b)
方法 说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变


ndarray数组的类型变换

new_a= a.astype(new_type)

astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致

ndarray数组向列表的转换

ls = a.tolist()


tolist可以让多维数组转化为多维列表

ndarray数组的操作

数组的索引和切片

索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程

(1)一维数组的索引和切片:与Python的列表类似

解释一下a[1:4:2]:
列表切片有三个参数start?step
a[start?step]

start:起始索引,从0开始,-1表示结束

end:结束索引

step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值

(2)多维数组的索引

(3)多维数组的切片

多维数组的切片是用逗号分隔每个维度,每个维度的切片方式和一维数组相同

ndarray数组的运算

数组与标量之间的运算作用于数组的每一个元素


上图就是计算a与元素平均值的商

对ndarray中的数据执行元素级运算的函数

函数 说明
np.abs(x) np.fabs(x) 计算数组各元素的绝对值
np.sqrt(x) 计算数组各元素的平方根
np.square(x) 计算数组各元素的平方
np.log(x) np.log10(x) np.log2(x) 计算数组各元素的自然对数、10底对数和2底对数
np.ceil(x) np.floor(x) 计算数组各元素的ceiling值或floor值
np.rint(x) 计算数组各元素的四舍五入值
np.modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x) np.cosh(x) np.sin(x)
np.sinh(x) np.tan(x) np.tanh(x)
计算数组各元素的普通型和双曲型三角函数
np.exp(x) 计算数组各元素的指数值
np.sign(x) 计算数组各元素的符号值,1(+), 0, ‐1(‐)


使用square方法时不会改变原数组的值,这点需要注意,一般情况下,python中调用函数进行运算不会改变原有的参数的值,但是调用方法进行运算时会改变原有的值

NumPy二元函数

函数 说明
+ ‐* / ** 两个数组各元素进行对应运算
np.maximum(x,y) np.fmax()
np.minimum(x,y)np.fmin()
元素级的最大值/最小值计算
np.mod(x,y) 元素级的模运算
np.copysign(x,y) 将数组y中各元素值的符号赋值给数组x对应元素
> < >= <= == != 算术比较,产生布尔型数组

总结

这是我第一次写博文,多有疏漏之处,希望各位网友及时指出,欢迎大家给我提意见,每一条我都会仔细阅读并思考,以后还会更新关于数据处理方面的入门教程,有兴趣的朋友可以关注我。

[入门教程](python numpy入门)相关推荐

  1. python快速编程入门教程-python从入门到精通之30天快速学python视频教程

    python从入门到精通之30天快速学python视频教程 课程目录: python入门教程-1-Python编程语言历史及特性.mkv python入门教程-2-Python编程语言初接触.mkv ...

  2. python新手入门教程-Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数――整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...

  3. python快速入门教程-Python快速入门

    Python语言本身就是一门简单的语言,入门非常容易. 机器学习中用到的Python(语法)相对就更简单了. 本文从机器学习的视角来看需要具备的Python基础. 我们的目标是-- 没有蛀牙... 针 ...

  4. python爬虫入门教程-Python爬虫入门教程——爬取自己的博客园博客

    互联网时代里,网络爬虫是一种高效地信息采集利器,可以快速准确地获取网上的各种数据资源.本文使用Python库requests.Beautiful Soup爬取博客园博客的相关信息,利用txt文件转存. ...

  5. python自学入门教程-Python自学入门基础教程-数据类型

    在程序中,被运算的可分为常量(Literals)和变量(Variables) 1x = 10*2-5 2y = x+1 以上的变量都属于Python数据类型中的一部分. 在以上代码中,10.2.5都是 ...

  6. python的numpy教程_ROS与Python入门教程-使用numpy

    ROS与Python入门教程-使用numpy 说明 这一节介绍numpy,它是针对科学计算的python软件包, 用于处理传感器数据,数组数据等. 在本教程中,我们将使用rospy.numpy_msg ...

  7. keil obj 文件 结构_【Python】数据分析前的入门教程 Python For Everybody P2:数据结构...

    这是密歇根大学课程Python For Everybody总结的P2部分.课程总结P1部分的地址如下: P1: 零基础程序设计(Python 入门) carolinezhq:[Python]数据分析前 ...

  8. 视频教程-Python零基础入门教程-Python

    Python零基础入门教程 从2012年从事互联网至今有7年软件编程经验,曾任职国内北京互联网公司,中南林业大学授课Python 现任逻辑教育Python课程负责人,精通Python语言,精通人工智能 ...

  9. 【Python语言基础】——Python NumPy 入门

    Python语言基础--Python NumPy 入门 文章目录 Python语言基础--Python NumPy 入门 一.Python NumPy 入门 一.Python NumPy 入门 安装 ...

最新文章

  1. Java项目:电商书城平台系统设计和实现(java+springboot+mysql+spring+jsp)
  2. 深入浅出:Linux设备驱动之字符设备驱动
  3. 下行物理信道rs_基于大规模MIMO技术的中继协作物理层安全研究
  4. 【网络流24题】魔术球问题(最大流)
  5. python git是什么_python爬虫之git的使用
  6. MySQL时间格式TIMESTAMP和DATETIME的区别
  7. 【树形DP】路径计数机(nowcoder 1103-B)
  8. CMake configure_file命令
  9. Redis内核原理及读写一致企业级架构深入剖析1-综合组件环境实战
  10. MCSE2003学习之八
  11. Python正则表达式用法总结
  12. php7 configure 参数,PHP编译参数configure配置详解
  13. eclipse lombok插件安装_Eclipse导入spring-boot-plus(三)
  14. UID 修改 UID 锁死修复
  15. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)...
  16. 袋鼠云服务案例系列 | 从DB2到MySQL,某传统金融平台的互联网转型之路
  17. 实用主义学python_麻瓜编程《实用主义学Python》课程全集下载地址 – 爱学知识网...
  18. $(div /)代表的意思
  19. asmr刷新失败无法连接上服务器_月圆之夜连接服务器失败 连接不上网络怎么办...
  20. 微信IOS navigator.getUserMedia undefined

热门文章

  1. 北航计算机学院王华峰,软件学院学术论坛第四次宣讲会——SCI投稿论文宣讲与点评...
  2. 可能是东半球最好的多线程讲义!
  3. Java设计模式中组合模式是什么/树形结构怎么组合或显示存储,编程怎么实现树形结构
  4. 教你怎么制作高大上的三维热力图
  5. java equals contains 不管用
  6. 广告行业中那些趣事系列51:超牛的kaggle比赛Favorita Grocery Sales Forecasting冠军方案...
  7. 将yolov5的detect.py改写成可以供其他程序调用的方式,并实现低时延(<0.5s)直播推理
  8. SMBLoris windows拒绝服务漏洞
  9. Python 网络爬虫实战:去哪儿网旅游攻略图文爬取保存为 Markdown电子书
  10. 笔记:《机器学习训练秘籍》-吴恩达deeplearningai微信公众号推送文章