numpy简介

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

NumPy是高性能科学计算和数据分析的基础

NumPy的主要功能:

  • ndarray,一个多维数组结构,高效且节省空间

  • 无需循环对整组数据进行快速运算的数学函数

  • *读写磁盘数据的工具以及用于操作内存映射文件的工具

  • *线性代数、随机数生成和傅里叶变换功能

  • *用于集成C、C++等代码的工具

Numpy的安装

pip install numpy

ndarray-多维数组创建

ndarry是多维数组结构,与列表区别:

  • 数组对象内的元素类型必须相同

  • 数组大小不可修改

np.array()创建

import numpy as np
np.array()

# 创建一维数组
np.array([1,2,3,4,5])
# array([1, 2, 3, 4, 5])

# 创建二维数组
np.array([[1,2,3],[4,5,6]])
# array([[1, 2, 3],
[4, 5, 6]])

注意:

  • numpy默认ndarray的所有元素的类型是相同的

  • 如果传进列表中包含不同的类型,会统一为一个类型,优先级:str>float>int

np.array([[1,2.2,3],[4,5,6]])  # 整数都会变成浮点数
# array([[1. , 2.2, 3. ],
[4. , 5. , 6. ]])

np的routines函数创建

  • np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数量数组

np.linspace(1,100,num=20)  # 产生1-100之间数量20个的等差数组
  • np.arange([start, ]stop, [step, ]dtype=None) 等差步长数组

np.arange(0,100,step=2)  # 产生0-100,步长为2的等差数组
  • random.randint(low,high=None,size=None,dtype="1")

np.random.randint(0,100,size=(4,5))  # size表示维度
# array([[83, 58, 4, 20, 35],
[13, 33, 30, 14, 79],
[86, 58, 33, 44, 63],
[43, 40, 55, 16, 13]])

# 固定随机数组的随机因子,每次产生固定不变数组
np.random.seed(10) # 随机因子/时间种子
np.random.randint(0,100,size=(4,5))

ndarray属性和方法

常用属性

  • T:数组的转置(对高维数组而言)

  • dtype:数组元素的数据类型

  • size:数组元素的个数

  • ndim:数组的维数

  • shape:数组的维度大小(以元组形式)

img_arr = plt.imread('./girl.jpg')  # 打开一张图片,获取图片的矩阵数组

# 获取数组的维度
img_arr.ndim
# 3

# 获取数组的外形
img_arr.shape
# (676, 1202, 3)

# 获取数组的大小
img_arr.size
# 2437656

# 获取数组的数据类型
img_arr.dtype
# dtype('uint8')

常用方法

numpy.zeros(dim1,dim2)              创建dim1*dim2的零矩阵
numpy.arange
numpy.eye(n) /numpy.identity(n) 创建n*n单位矩阵
numpy.array([…data…], dtype=float64 )
array.astype(numpy.float64) 更换矩阵的数据形式
array.astype(float) 更换矩阵的数据形式
array * array 矩阵点乘
array[a:b] 切片
array.copy() 得到ndarray的副本,而不是视图
array [a] [b]=array [ a, b ] 两者等价
name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool)
data[True,False,…..] 索引,只索取为True的部分,去掉False部分
通过布尔型索引选取数组中的数据,将总是创建数据的副本。
data[ [4,3,0,6] ] 索引,将第4,3,0,6行摘取出来,组成新数组
data[-1]=data[data.__len__()-1]
numpy.reshape(a,b) 将a*b的一维数组排列为a*b的形式
array([a,b,c,d],[d,e,f,g]) 返回一维数组,分别为[a,d],[b,e],[c,f],[d,g]
array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ]
array.T array的转置
numpy.random.randn(a,b) 生成a*b的随机数组
numpy.dot(matrix_1,matrix_2) 矩阵乘法
array.transpose( (1,0,2,etc.) ) 对于高维数组,转置需要一个由轴编号组成的元组

ndarray索引和切片、变形

1、数组和标量之间的运算
a+1 a*3 1//a a**0.5
2、同样大小数组之间的运算
a+b a/b a**b
3、数组的索引:
一维数组:a[5]
多维数组:
列表式写法:a[2][3]
新式写法:a[2,3] (推荐)
数组的切片:
一维数组:a[5:8] a[4:] a[2:10] = 1
多维数组:a[1:2, 3:4] a[:,3:5] a[:,1]
4、强调:与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。 【解决方法:copy()】

索引

一维数组的索引和列表一致,多维同理

无法直接索引某一列

arr = np.random.randint(0,100,size=(5,7))

arr[1] # 获取索引为1的行

arr[[1,2]] # 获取索引1,2的行

arr[1,2] # 获取行索引为1,列索引为2的值

切片

一维数组的切片和列表相同,多维同理

# 获取二维数组前两行
arr[0:2] # 默认切片为行索引

# 获取二维数组前两行和前两列
arr[0:2,0:2]

数据反转

# 将数组的行反转
arr[::-1]

# 将数组的列反转
arr[:,::-1]

# 全部反转
arr[::-1,::-1]

变形

ndarray数组可以使用arr.reshape()函数,注意参数是一个tuple

多维数组和一维数组之间的转换

arr = np.random.randint(0,100,size=(4,6))
arr.shape

# 二维变一维
arr_1 = arr.reshape(24)
arr_2 = arr.reshape((1,24))

# 一维变多维
arr_3 = arr_1.reshape((3,8))
arr_4 = arr_1.reshape

arr_5 = arr_1.reshape((4,-1)) # -1表示自动计算

# 多维转多维
arr_6 = arr.reshape((3,8))

注意:

  • 在变形的过程中,数组的维度乘积必须是一致的,如4*6 可以变形为2*12,也可以变为8*3,1*24

级联

np.concatenate()

对多个numpy数组进行横向或者纵向的拼接

1.一维、二维、多维数组的级联,实际操作中级联为二维数组

np.concatenate((arr,arr),axis=0)  # axis代表轴向,0表示咧,1表示行

2.合并照片

# 利用我们刚才打开的照片数组
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) # 水平拼接三个数组
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0) # 垂直拼接上面拼接的图片
plt.imshow(arr_9) # 最终展示为9宫格的图片

ndarray布尔类型索引

问题:给一个数组,选出数组中所有大于5的数。

  • 答案:a[a>5] 原理: a>5会对a中的每一个元素进行判断,返回一个布尔数组 布尔型索引:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组

问题2:给一个数组,选出数组中所有大于5的偶数。

问题3:给一个数组,选出数组中所有大于5的数和偶数。

  • 答案: a[(a>5) & (a%20)] a[(a>5) | (a%20)]

import numpy as np
a = np.array([1,2,3,4,5,4,7,8,9,10])
a[a>5&(a%2==0)] # 注意加括号,不叫括号错误,如下
# array([ 1, 2, 3, 4, 5, 4, 7, 8, 9, 10])

a[(a>5)&(a%2==0)]
# array([ 8, 10])

ndarray聚合函数

  • numpy.sum():求和函数

  • numpy.max()/min():最大值/最小值

  • numpy.mean():平均值

  • cumsum:求前缀和

  • std:求标准差

  • var:求方差

  • argmin:求最小值索引

  • argmax:求最大值索引

arr.sum(axis=1)  # 列向求和
arr.max(axis=1) # 列向最大值
arr.mean(axis=1) # 列向平均值

其他聚合函数

  • Function Name NaN-safe Version Description

  • np.sum np.nansum Compute sum of elements

  • np.prod np.nanprod Compute product of elements

  • np.mean np.nanmean Compute mean of elements

  • np.std np.nanstd Compute standard deviation

  • np.var np.nanvar Compute variance

  • np.min np.nanmin Find minimum value

  • np.max np.nanmax Find maximum value

  • np.argmin np.nanargmin Find index of minimum value

  • np.argmax np.nanargmax Find index of maximum value

  • np.median np.nanmedian Compute median of elements

  • np.percentile np.nanpercentile Compute rank-based statistics of elements

  • np.any N/A Evaluate whether any elements are true

  • np.all N/A Evaluate whether all elements are true

  • np.power 幂运算

ndarray排序

numpy.sort()和ndarray.sort()都可以排序,稍有区别

numpy.sort(arr,axis=0)  # 返回一个新的排序好的对象,arr并没有改变

arr.sort(axis=0) # arr直接被改变了

numpy库简单使用的更多相关文章

  1. numpy 库简单使用

    numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...

  2. numpy 库使用

    numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...

  3. 简单记录numpy库的某些基本功能

    这里介绍python的一个库,numpy库,这个库是机器学习,数据分析最经常用到的库之一,也是利用python做数据必须用到的一个库,入门机器学习学的第一个python库就是它了. 先对其导入到pyt ...

  4. numpy库:常用基本

    numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...

  5. 初识NumPy库-基本操作

    ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...

  6. Numpy库(个人学习笔记)

    一样,咱的计算机还是得先拥有Python,并且安装了Numpy库.有疑问的话可以看这里呦~~~~ 下面开讲: NumPy的主要对象是齐次多维数组.它是一个元素表(通常是数字),并且都是相同类型,由正整 ...

  7. Numpy库的下载及安装(吐血总结)

    Python很火,我也下了个来耍耍一阵子.可是渐渐地,我已经不满足于它的基本库了,我把目光转到了Numpy~~~~~ 然而想法总是比现实容易,因为我之前下的是Python3.3.x,所有没有自带pip ...

  8. Numpy库的学习(五)

    今天继续学习一下Numpy库,废话不多说,整起走 先说下Numpy中,经常会犯错的地方,就是数据的复制 这个问题不仅仅是在numpy中有,其他地方也同样会出现 import numpy as np a ...

  9. Numpy库的学习(一)

    今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直 ...

随机推荐

  1. Mac下的常用快捷键总结

    由于在公司的时候是使用的Windows下进行开发工作,但是回家之后,有时候要使用自己的Mac进行开发等工作,那么流利的使用快捷键就变得尤其的重要. 1. 退出软件 cmd + q 2.将最前面的窗口最 ...

  2. php通过反射方法调用私有方法

    PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 下面我们演示一下如何通过反射,来调用执行一个类中的私有方法: <?php //MyClass这个类中包 ...

  3. linux如何配置使用sendEmail发送邮件

    sendEmail是一个轻量级.命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择.使用简单并且功能强大.这个被设计用在php.bash.perl和web ...

  4. caffe py3 docker

    https://hub.docker.com/r/mapler/caffe-py3/ docker pull mapler/caffe-py3 docker run  -it  mapler/caff ...

  5. 生成树计数及应用 Matrix-Tree

    例:给定一个图,图上每条边是红色或蓝色 求恰好有K条红边的生成树的个数,N<=50. Matrix-Tree定理 对于限制条件可以利用多项式,把红边边权设为X,蓝边边权设为1. 最后求行列式得到 ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(4)|借用Borrowing]

    [易学易懂系列|rustlang语言|零基础|快速入门|(4)] Borrowing 继续讲讲另一个重要的概念:借用(borrowing), 什么是借用? 我们先来看前一文章([易学易懂系列|rust ...

  7. java高并发实战Netty+协程(Fiber)|系列1(续)|事件驱动模式和零拷贝

    上次讲到事件驱动模式,今天我们来好好分析下netty的事件模式的几个类型. 先从NIO讲起, JAVA NIO方面Selector给Reactor模式提供了基础,Netty结合Selector和Rea ...

  8. bootstrap-table(2)问题集

    参考;https://www.cnblogs.com/landeanfen/p/4993979.html 1.分页参数sidePagination 如果是服务端分页,返回的结果必须包含total.ro ...

  9. 漫谈 MyCat 配置系统

    上篇文章<MyCat 启蒙:分布式系统的数据库架构演变>中,我们通过一个项目从零到百万级访问的变化,展示了这个过程中的数据层架构变化.其中说到了数据层架构变化所带来的三个问题: 读写数据源 ...

  10. 一个IP,一个linux服务器,两个项目,两个域名;如何将两个域名配置到同一个IP的两个项目中。

    一.现有资源: 1.阿里云centOS6.5服务器: 2.安装tomcat8.0+JDK: 3.两个不同maven项目的war包,项目名分别为cloud.am: 4.两个域名http://www.lu ...