NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。 注:以上是题外话,方便进入主题,本文重在基础的操作。


一、总述:

    NumPy的基础,方便查阅。

二、创建ndarray数组:

# -*- coding:utf-8 -*-
# author:
import numpy
data = [1,2,3,4,5,6]
x = numpy.array(data)#列表生成一维数组
print(x)#打印数组
print(x.dtype)#打印数组元素的类型
data = [[1,2],[3,4],[5,6]]
x = numpy.array(data)#列表生成二维数组
print(x )#打印数组
print(x.ndim )#打印数组的维度
print(x.shape) #打印数组各个维度的长度。shape是一个元组
x = numpy.zeros(6) #创建一维长度为6的,元素都是0一维数组
x = numpy.zeros((2,3)) #创建一维长度为2,二维长度为3的二维0数组
x = numpy.ones((2,3)) #创建一维长度为2,二维长度为3的二维1数组
x = numpy.empty((3,3)) #创建一维长度为2,二维长度为3,未初始化的二维数组
print(numpy.arange(6)) # [0,1,2,3,4,5,] 开区间生成连续元素
print(numpy.arange(0,6,2) ) # [0, 2,4]生成连续元素

三、指定ndarray数组元素的类型:

# -*- coding:utf-8 -*-
# author:
import numpy
x = numpy.array([1,2.6,3],dtype = numpy.int64)#生成指定元素类型的数组:设置dtype属性
x = numpy.array([1,2,3],dtype = numpy.float64)
print(x )# 元素类型为float64
print(x.dtype)
x = numpy.array([1,2.6,3],dtype = numpy.float64)#使用astype复制数组,并转换类型
y = x.astype(numpy.int32)
z = y.astype(numpy.float64)
x = numpy.array(['1','2','3'],dtype = numpy.string_)#将字符串元素转换为数值元素
y = x.astype(numpy.int32)
x = numpy.array([ 1., 2.6,3. ],dtype = numpy.float32)#使用其他数组的数据类型作为参数
y = numpy.arange(3,dtype=numpy.int32)
print(y)
print(y.astype(x.dtype))

四、ndarray的矢量化计算:

# -*- coding:utf-8 -*-
# author:
import numpy
'''ndarray数组与标量/数组的运算'''
x = numpy.array([1,2,3])
print(x*2)
print(x>2)
y = numpy.array([3,4,5])
print(x+y)
print(x>y)

五、ndarray数组的基本索引和切片:

# -*- coding:utf-8 -*-
# author:
import numpy
'''ndarray的基本索引'''
x = numpy.array([[1,2],[3,4],[5,6]])
print(x[0]) # [1,2]
print(x[0][1]) # 2,普通python数组的索引
print(x[0,1]) # 同x[0][1],ndarray数组的索引
x = numpy.array([[[1, 2], [3,4]], [[5, 6], [7,8]]])
print(x[0]) # [[1 2],[3 4]]
y = x[0].copy() # 生成一个副本
z = x[0] # 未生成一个副本
print(y) #  [[1 2],[3 4]]
print(y[0,0] )# 1
y[0,0] = 0
z[0,0] = -1
print(y )# [[0 2],[3 4]]
print(x[0]) # [[-1 2],[3 4]]
print(z) # [[-1 2],[3 4]]
'''ndarray的切片'''
x = numpy.array([1,2,3,4,5])
print(x[1:3]) # [2,3] 右边开区间
print(x[:3] )# [1,2,3] 左边默认为 0
print(x[1:]) # [2,3,4,5] 右边默认为元素个数
print(x[0:4:2]) # [1,3] 下标递增2
x = numpy.array([[1,2],[3,4],[5,6]])
print(x[:2] )# [[1 2],[3 4]]
print(x[:2,:1] )# [[1],[3]]
x[:2,:1] = 0 # 用标量赋值
print(x )# [[0,2],[0,4],[5,6]]
x[:2,:1] = [[8],[6]] # 用数组赋值
print(x) # [[8,2],[6,4],[5,6]]

六、ndarray数组的布尔索引和其他索引:

# -*- coding:utf-8 -*-
# author:
import numpy
'''ndarray的布尔型索引'''
x = numpy.array([3,2,3,1,3,0])
# 布尔型数组的长度必须跟被索引的轴长度一致
y = numpy.array([True,False,True,False,True,False])
print(x[y] )# [3,3,3]
print(x[y==False]) # [2,1,0]
print(x>=3) # [ True False  True False  True  False]
print(x[~(x>=3)]) # [2,1,0]
print((x==2)|(x==1) )# [False  True False  True False False]
print(x[(x==2)|(x==1)] )# [2 1]
x[(x==2)|(x==1)] = 0
print(x )# [3 0 3 0 3 0]

七、ndarray数组的转置和轴对换:

# -*- coding:utf-8 -*-
# author:
import numpy
'''ndarray数组的转置和轴对换'''
k = numpy.arange(9) #[0,1,....8]
m = k.reshape((3,3)) # 改变数组的shape复制生成2维的,每个维度长度为3的数组
print(k )# [0 1 2 3 4 5 6 7 8]
print(m )# [[0 1 2] [3 4 5] [6 7 8]]
# 转置(矩阵)数组:T属性 : mT[x][y] = m[y][x]
print(m.T )# [[0 3 6] [1 4 7] [2 5 8]]
# 计算矩阵的内积 xTx
print(numpy.dot(m,m.T)) # numpy.dot点乘
# 高维数组的轴对象
k = numpy.arange(8).reshape(2,2,2)
print(k )# [[[0 1],[2 3]],[[4 5],[6 7]]]
print(k[1][0][0])
# 轴变换 transpose 参数:由轴编号组成的元组
m = k.transpose((1,0,2)) # m[y][x][z] = k[x][y][z]
print(m )# [[[0 1],[4 5]],[[2 3],[6 7]]]
print(m[0][1][0])
# 轴交换 swapaxes (axes:轴),参数:一对轴编号
m = k.swapaxes(0,1) # 将第一个轴和第二个轴交换 m[y][x][z] = k[x][y][z]
print(m )#) [[[0 1],[4 5]],[[2 3],[6 7]]]
print(m[0][1][0])
# 使用轴交换进行数组矩阵转置
m = numpy.arange(9).reshape((3,3))
print(m )# [[0 1 2] [3 4 5] [6 7 8]]
print(m.swapaxes(1,0)) # [[0 3 6] [1 4 7] [2 5 8]]

八、ndarray通用函数:

九、NumPy的where函数使用:

# -*- coding:utf-8 -*-
# author:
import numpy
'''where函数的使用'''
cond = numpy.array([True,False,True,False])
x = numpy.where(cond,-2,2)
print(x) # [-2  2 -2  2]
cond = numpy.array([1,2,3,4])
x = numpy.where(cond>2,-2,2)
print(x) # [ 2  2 -2 -2]
y1 = numpy.array([-1,-2,-3,-4])
y2 = numpy.array([1,2,3,4])
x = numpy.where(cond>2,y1,y2) # 长度须匹配
print(x) # [1,2,-3,-4]'''where函数的嵌套使用'''
y1 = numpy.array([-1,-2,-3,-4,-5,-6])
y2 = numpy.array([1,2,3,4,5,6])
y3 = numpy.zeros(6)
cond = numpy.array([1,2,3,4,5,6])
x = numpy.where(cond>5,y3,numpy.where(cond>2,y1,y2))
print(x) # [ 1.  2. -3. -4. -5.  0.]

十、ndarray常用的统计方法:

十一、ndarray数组的去重以及集合运算:

# -*- coding:utf-8 -*-
# author:
import numpy
'''ndarray的唯一化和集合运算'''
x = numpy.array([[1,6,2],[6,1,3],[1,5,2]])
print(numpy.unique(x)) # [1,2,3,5,6]
y = numpy.array([1,6,5])
print(numpy.in1d(x,y)) # [ True  True False  True  True False  True  True False]
print(numpy.setdiff1d(x,y) )# [2 3]
print(numpy.intersect1d(x,y) )# [1 5 6]

十二、numpy中的线性代数:

十三、numpy中的随机数生成:

# -*- coding:utf-8 -*-
# author:
import numpy as np
a=np.random.randint(0,10,100)#范围内的整数
print(a)
b=np.random.rand(40)#0到1的均匀分布
print(b)
c=np.random.randn(10)#标准正态分布
print(c)
d=np.random.normal(0,1,100)#生成指定正态分布
print(d)
e=np.random.random(20)#0到1的均匀分布
print(e)
f=np.random.ranf(20)#0到1的均匀分布
print(f)
g=np.random.uniform(-1,1,100)#指定均匀分布
print(g)

十四、ndarray数组重塑:

# -*- coding:utf-8 -*-
# author:
import numpy
'''ndarray数组重塑'''
x = numpy.arange(0,6) #[0 1 2 3 4]
print(x) #[0 1 2 3 4]
print(x.reshape((2,3))) #) [[0 1 2][3 4 5]]
print(x )#[0 1 2 3 4]
print(x.reshape((2,3)).reshape((3,2))) # [[0 1][2 3][4 5]]
y = numpy.array([[1,1,1],[1,1,1]])
x = x.reshape(y.shape)
print(x )# [[0 1 2][3 4 5]]
print(x.flatten() )# [0 1 2 3 4 5]
x.flatten()[0] = -1 # flatten返回的是拷贝
print(x )# [[0 1 2][3 4 5]]
print(x.ravel()) # [0 1 2 3 4 5]
x.ravel()[0] = -1 # ravel返回的是视图(引用)
print(x) # [[-1 1 2][3 4 5]]
'''"维度大小自动推导"'''
arr = numpy.arange(15)
print(arr.reshape((5, -1))) # 15 / 5 = 3

十五、ndarray数组的拆分与合并:

十六、数组的元素重复操作:

# -*- coding:utf-8 -*-
# author:
import numpy
'''数组的元素重复操作'''
x = numpy.array([[1,2],[3,4]])
print(x.repeat(2)) # 按元素重复 [1 1 2 2 3 3 4 4]
print(x.repeat(2,axis=0)) # 按行重复 [[1 2][1 2][3 4][3 4]]
print(x.repeat(2,axis=1)) # 按列重复 [[1 1 2 2][3 3 4 4]]
x = numpy.array([1,2])
print(numpy.tile(x,2)) # tile瓦片:[1 2 1 2]
print(numpy.tile(x, (2, 2)))  # 指定从低维到高维依次复制的次数。
# [[1 2 1 2][1 2 1 2]]

参考:

  • NumPy 官网 http://www.numpy.org/
  • NumPy 源代码:https://github.com/numpy/numpy
  • SciPy 官网:https://www.scipy.org/
  • SciPy 源代码:https://github.com/scipy/scipy
  • Matplotlib 官网:https://matplotlib.org/
  • Matplotlib 源代码:https://github.com/matplotlib/matplotlib
  • https://blog.csdn.net/cxmscb/article/details/54583415

 

Python之Numpy操作基础相关推荐

  1. Python数据分析——NumPy数值计算基础(二)

    Python数据分析--NumPy数值计算基础(二) 思维导图: 数据的csv文件存取 csv(Comma-Separated Value,逗号分隔值)文件:是一种常见的文件格式,用来存储批量数据. ...

  2. python分析基金数据,[Python数据分析]numpy基金会,基础

    数组属性 ndim与shape的区别 ndim 轴的数量,即从外到内的层数(axis=0为最外层) shape 每层数组的元素,返回一个元组,其长度即为ndim,比如(2,2,3)表示axis=0,有 ...

  3. 15 python的文件操作

    一.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作,文件也叫I/O(Input/Output) 文件的操作步骤 打开文件 对文件进行各种操作(读.写)然后保存 ...

  4. [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

    一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...

  5. Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  6. 来都来了,你确定不看看,使用python中的科学计算库Numpy操作数组,你一定能学废(图文并茂版)

    Numpy操作数组 Numpy库 Numpy库的介绍 Numpy库的安装: python中数组与列表对比 列表: 数组: 数组的创建 使用array方法创建数组 注意: ndmin,dtype参数的使 ...

  7. Python——NumPy数值计算基础

    NumPy简介 NumPy是一个Python科学计算的基础包,它不仅是Python中使用最多的第三方库,而且还是SciPy,Pandas等数据科学的基础库.NumPy主要提供了以下内容. (1)快速高 ...

  8. 【Python基础】Python 炫技操作:五种 Python 转义表示法

    相信对于不少同学来说,即使是非常不起眼的 转义, 本篇文章也是能学到不少东西的. 好了,以下是文章的正文. 1. 为什么要有转义? ASCII 表中一共有 128 个字符.这里面有我们非常熟悉的字母. ...

  9. python中numpy矩阵运算操作大全(非常全)!

    python中numpy矩阵运算操作大全(非常全) //2019.07.10晚 python矩阵运算大全 1.矩阵的输出形式: 对于任何一个矩阵,python输出的模板是: import numpy ...

  10. Python 文件读写操作-Python零基础入门教程

    目录 一.Python 文件的打开 open 二.Python 文件的关闭 close 三.Python 文件的读取 read 1.read 函数 2.readline 函数 3.readlines ...

最新文章

  1. 如何使用Spring优雅地处理REST异常?
  2. 使用keras时下载VGG19过慢的解决方法
  3. 高精度数取余(C\C++)
  4. C语言实例:将人员信息写入磁盘文件并读出显示
  5. b350主板支持cpu列表_惊!AMD旧主板通过这个方法竟也能支持PCIe4.0
  6. iOS扩大按钮的点击范围
  7. Mac OS使用技巧之三:发射无线网络信号的方法
  8. 3P新产品开发管理实务
  9. php 数组 闭包,PHP如何用array_filter加闭包函数过滤数组?
  10. 程序员翻车时的 30 种常见反应!第21个深有感触...
  11. Word没有到一行自动换行如何解决
  12. 注册EXE文件为Windows服务.txt
  13. html表单电子邮件验证验证,详解JavaScript表单验证(E-mail 验证)
  14. unity3d游戏3dRPG角色扮演完整项目源码分享
  15. 【硬件】详解电流采样电路
  16. (十三)【数电】(半导体存储电路)同步(电平)触发器|边沿触发的触发器
  17. Flash绘画与动画宝典
  18. python中matplotlib绘图中文显示问题
  19. 银河系中一定有生命存在
  20. AI PNG Enlarger (AI图片放大工具) - 用深度学习AI算法放大图片,不模糊并保持透明度

热门文章

  1. 剑指offer 06-从尾到头打印链表
  2. Html+Css打造一个精美的注册页面
  3. python接口自动化代码_python接口自动化(十六)--参数关联接口后传(详解)
  4. tablayout 增加数字小标_Android中TabLayout添加小红点的示例代码
  5. 计算机组成原理:二进制与十进制互转
  6. linux soc 程序崩溃,SOC、FLCK和内存之间的关系,以3900X+X570为例(更新PCIE4.0)
  7. HTTP、websocket、XMPP、COAP、MQTT和DDS协议对比
  8. opencv图像分析与处理(14)- 图像压缩基础知识
  9. 图像语义分割(16)-DUpsampling-新型上采样模块:能够聚合丰富特征的数据相关型解码方式(CVPR2019)
  10. 重磅!泰晤士发布重量级学科排名,90所中国大陆高校上榜!