numpy库简单使用
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库简单使用的更多相关文章
- numpy 库简单使用
numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...
- numpy 库使用
numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...
- 简单记录numpy库的某些基本功能
这里介绍python的一个库,numpy库,这个库是机器学习,数据分析最经常用到的库之一,也是利用python做数据必须用到的一个库,入门机器学习学的第一个python库就是它了. 先对其导入到pyt ...
- numpy库:常用基本
numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...
- 初识NumPy库-基本操作
ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...
- Numpy库(个人学习笔记)
一样,咱的计算机还是得先拥有Python,并且安装了Numpy库.有疑问的话可以看这里呦~~~~ 下面开讲: NumPy的主要对象是齐次多维数组.它是一个元素表(通常是数字),并且都是相同类型,由正整 ...
- Numpy库的下载及安装(吐血总结)
Python很火,我也下了个来耍耍一阵子.可是渐渐地,我已经不满足于它的基本库了,我把目光转到了Numpy~~~~~ 然而想法总是比现实容易,因为我之前下的是Python3.3.x,所有没有自带pip ...
- Numpy库的学习(五)
今天继续学习一下Numpy库,废话不多说,整起走 先说下Numpy中,经常会犯错的地方,就是数据的复制 这个问题不仅仅是在numpy中有,其他地方也同样会出现 import numpy as np a ...
- Numpy库的学习(一)
今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直 ...
随机推荐
- React-native 底部导航栏(二)
1.组件安装:npm install react-native-router-flux --save 2.定义菜单图片和文字: import React, { Component } from 're ...
- oracle分页查询按日期排序失败问题
今天对已经上线的代码进行测试,结果发现分页是失效的,一度怀疑是前台页面分页失效,排查后发现是分页sql有问题,分页sql按日期排序,导致分页失败. 按日期排序,会造成相同的数据重复出现. 解决方案:在 ...
- JavaScript中实现li向上轮播
在网上找了很久,没有找到合适的模板,其实我这个也是公司用的,希望以后也能复用,节省时间 function scrollAuto(scrollBox, list){//两个参数分别填列表的ul的clas ...
- Laravel-admin 加载视图后,blade 模板 JS 失效
laravel-admin js无法解析 解决 在不需要使用 pjax 的地方使用 Admin::disablePjax();
- Linux crontab计划任务
1.cron计划任务的描述 cron计划任务允许用户根据“时间表”自动周期的完成任务某些任务. cron是一种system V服务,需要开启该服务才能使用. ...
- Laravel5.5去除URL中的index.php生成优雅链接
在使用Apache情况下: Laravel 框架通过 public/.htaccess 文件来让网址中不需要 index.php.如果你的服务器是使用 Apache ,请确认是否有开启 mod_rew ...
- SpringMVC初识
1 SpringMVC的概述 Spring为展现层提供的基于MVC设计理念的优秀的web框架,是目前最主流的MVC框架之一. Spring3.0后面全面超过Struts2,成为了最优秀的MVC框架. ...
- Python Web 服务开发者: 第 1 部分
Python Web 服务开发者: 第 1 部分 Python Web 服务世界 Python 的座右铭一向是“装备齐全”,这是指在安装该语言时会附带一大套标准库和功能程序.本文概述了在 Python ...
- Ionic4 & Cordova 打包Android,含签名
IOS打包必须在Mac环境,以下讲述安卓打包并签名的过程,若是不签名,那么APP不能在手机上安装. 1.添加对应的android框架 ionic cordova prepare android 1)修 ...
- python接口自动化一(发送get请求)
一.环境安装 1.用pip安装requests模块 >>pip install requests 二.get请求 1.导入requests后,用get方法就能直接访问url地址,如:htt ...