python包介绍:numpy
1 ndarray
相比于python中的list,ndarray的核心优势就是运算快
Numpy
喜欢用电脑内存中连续的一块物理地址存储数据
Python
的 List
并不是连续存储的,它的数据是分散在不同的物理空间(list中的类型可以是不一样的)
1.1 创建
np.array(object,dtype=…) |
用object创建ndarray |
||||||
empty(shape,dtype=)empty_like(data) |
指定形状&类型,元素值均为随机值 |
||||||
zeros(shape,dtype=)zeros_like(data) |
填充0 |
||||||
onesones_like(data) |
填充1 |
||||||
full(shape,num,dtype)full_like(data,num) |
用num填充shape大小的数组 |
||||||
eye(num,dtype)等同于identity(num,dtype) |
num*num的单位矩阵 |
||||||
random.random(shape,dtype) |
![]() |
||||||
numpy.random.normal(loc,scale,size) |
正态分布
|
||||||
diag |
当 np.diag(array) 中 array是一个1维数组时,结果形成一个以一维数组为对角线元素的矩阵 array是一个二维矩阵时,结果输出矩阵的对角线元素 |
||||||
empty_like(x) |
创建一个形状和x一样的,数值随机 |
||||||
arange(start, stop, step, dtype) |
|
||||||
linspace |
创建一个等差数列
|
||||||
logspace |
创建一个等比数列 |
1.2 ndarray 属性
ndim |
矩阵维数 |
|
shape |
数组的维度(元组形式)【用reshape调整大小】 |
|
itemsize |
一个元素的大小(占几个字节) |
|
real |
元素的实部 |
|
imag |
元素的虚部 |
|
dtype |
数据类型 |
|
size |
元素个数 |
|
1.3 切片
a[start:end:step] |
左闭右开 |
a[…,x]——第x+1列 a[x,…]——第x+1行 |
![]() |
a[[list1],[list2]] |
获取 (list1[0].list2[0]) (list1[1].list2[1]) (list1[2].list2[2]) ….等索引位置的数据 |
a[list] |
获取list中这几行元素 |
a[np.ix_([list1],[list2])] |
获取第list1行的第list2列的数据 |
1.3.1 切片的性质
切片是原来的array的一个视图,修改切片的话,原来的也改变了
!!!记住结论:!!!
如果是数字/带数字的':'来切片的话,不论是不是有塌缩(类似于r1那样的变成一维的)都是原来的的一个view,元素修改了就一起修改了
如果是数组这样的索引切片的话(注:元组tuple不行),那么就是copy不是view了
如果是混合的(一个数组,一个纯数字),那么就是copy(因为有数组切片了)
import numpy as np
a=np.array([[1,2,3],[3,4,5],[7,8,9]])
b=a[1,:]
c=a[[1],:]
d=a[1:2,:]
print(a,'\n',b,c,d)
'''
[[1 2 3][3 4 5][7 8 9]] [3 4 5] [[3 4 5]] [[3 4 5]]
'''
b[1]=10
print(a,'\n',b,c,d)
'''
[[ 1 2 3][ 3 10 5][ 7 8 9]] [ 3 10 5] [[3 4 5]] [[ 3 10 5]]
'''
1.4 布尔索引
2 数组运算
执行数组的运算必须有相同的行列/符合广播规则
2.1 相同行列
相同行列:对应元素加减乘除
2.2 广播原则
当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制
2.2.1 数组+标量
2.2.2 数组+行/列
3 内积外积与矩阵乘法
3.1 外积
3.2 内积
内积——inner/dot
np.dot(a,b)等价于a.dot(b)
inner用法和dot稍有不同: np.dot(a, b)= np.inner(a, b.T),相当于b做一次转置
3.3 乘法
matmul/@/dot
4 函数
all |
矩阵中元素是否全部非零 |
||||||||||||||||||
any |
矩阵中是否有元素非零 |
||||||||||||||||||
argmax/argmin |
第几维度的最大最小值的坐标 Argmax[0]:对每一个a[…][0][0],a[…][0][1],a[…][0][2] a[…][1][0],a[…][1][1],a[…][1][2]找一个最大值 |
||||||||||||||||||
count_nonzero() |
统计非零元素值 |
||||||||||||||||||
floor |
向下取整 |
||||||||||||||||||
ceil |
向上取整 |
||||||||||||||||||
prod |
所有元素乘积结果 |
||||||||||||||||||
argsort |
argsort函数返回的是数组值从小到大的索引值
b——正序 -b——倒序 如果是多维的话(默认是最大的一个axis) Axis=0 a[..][0][0],a[…][0][1],a[…][0][2] a[..][1][0],a[…][1][1],a[…][1][2] Axis=1 a[0][…][0],a[0][…][1],a[0][…][2] Axis=2同理 |
||||||||||||||||||
copy |
这个是真copy,不是view |
||||||||||||||||||
clip |
截取数组中在min和max之间的部分,比min小的置为min,比max大的置为max |
||||||||||||||||||
cumsum/cumprod |
括号是几——第几维度累加/累乘(a[][][][]里面的第几个,从左往右) 括号里是0:原第一行=原第一行 原第二行=原第二行+原第一行 原第三行=原第三行+原第二行+原第一行 括号里是1:列的操作 没有字母,所有元素,一个一个叠加 |
||||||||||||||||||
diff |
类差运算 |
||||||||||||||||||
flatten |
返回一份数据拷贝,对拷贝所做的修改不影响原始数组 F风格:按列展开 flat 一个迭代器 |
||||||||||||||||||
np.isin(a,b) |
用于判定a中的元素在b中是否出现过,如果出现过返回True,否则返回False,最终结果为一个形状和a一模一样的数组。 和np.where搭配使用,效果更好(np.where返回True的坐标) 分别是我找到的1的第一维坐标和第二位坐标 |
||||||||||||||||||
nditer |
按照ndarray在内存中的存储顺序逐个访问 a和a转置在内存中的存储顺序一样——他们的遍历顺序一样 默认order=’C‘行优先 ——order=“F’(fortran 列优先) |
||||||||||||||||||
meshgrid(ndarray,ndarray) |
返回坐标方格的X与Y x和y都是二维数组,分别是这些点的横坐标/纵坐标 |
||||||||||||||||||
mean/average |
计算平均数,加axis就是某一个轴, 比如axis=0,就是每一列一个平均数(a[;;;][0],a[,,,,][1],…..,) average只能是np.average |
||||||||||||||||||
median |
中位数 | ||||||||||||||||||
std |
标准差 | ||||||||||||||||||
newaxis |
添加一个维度 感觉还是reshape靠谱一点 |
||||||||||||||||||
ravel |
和flatten差不多,唯一的区别是,修改会影响原始数组 |
||||||||||||||||||
reshape |
|
||||||||||||||||||
resize |
如果一样大的话和a.reshape()差不多 shape比a的尺寸小的话,那就是截取 如果尺寸大的话,会把a的元素按照a的顺序补进去 |
||||||||||||||||||
np.round |
round( number ) 函数会返回浮点数 number 的四舍五入值 具体定义为 round(number[,digits]): 如果 digits>0 ,四舍五入到指定的小数位; 如果 digits=0 ,四舍五入到最接近的整数; 如果 digits<0 ,则在小数点左侧进行四舍五入; 如果 round() 函数只有 number 这个参数,则等同于 digits=0。 |
||||||||||||||||||
split |
等量对分 (axis=0 a[1~n][0]会被等分到各个里面去) 一定是等量,不等量的话会报错 vsplit=split(axis=0) hsplit=split(axis=1) |
||||||||||||||||||
array_split |
不等量分割 |
||||||||||||||||||
np.sin |
逐元素取sin |
||||||||||||||||||
std |
计算标准差 Axis=0——计算a[…][0][0],a[…][0][1],…的标准差 |
||||||||||||||||||
squeeze |
删除单维度条目 |
||||||||||||||||||
tolist |
转换为list |
||||||||||||||||||
triu(data,k) |
以data为数据,创建一个上三角矩阵,k表示这个上三角的边接往上/下移动几条线的距离 |
||||||||||||||||||
tile |
np.tile(a,(2))函数的作用就是将函数将函数沿着X轴扩大两倍。如果扩大倍数只有一个,默认为X轴 np.tile(a,(2,1))第一个参数为Y轴扩大倍数,第二个为X轴扩大倍数。本例中X轴扩大一倍便为不复制。 |
||||||||||||||||||
np.timedelta(num,'x') |
计算两个datetime中间差多少时间间隔(向下取整)【Y、M、W、D、h、m、s、ms、us、ns】 |
||||||||||||||||||
转置 |
|
||||||||||||||||||
where |
numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。*如果y是数组的话,输出y相应位置的元素 2. np.where(condition) 只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标。 这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。 |
||||||||||||||||||
fromstring |
从string中提取成ndarray
|
番外篇:理解axis
前面我们提到了axis的用法
Axis=0——
a[..][0][0],a[…][0][1],a[…][0][2]
a[..][1][0],a[…][1][1],a[…][1][2]
Axis=1——
a[0][…][0],a[0][…][1],a[0][…][2]
换一种理解就是:
有两组数据,它们的维度都是(2,3),即都是两行三列的数据。
当axis设为0时,表示我们要修改第一个维度的数据,两组数据的第一个维度都是2,当它们合并时就变成了4,所以合并后的数据的维度就是(4,3),即变成了四行三列。同理,axis设为1,合并后的数据维度就变成了(2,6),即两行六列~
同理,axis参数在其他方法里也可以用同样的方法思考,比如求均值的mean方法,当axis设为0时,对第一个维度的数据进行求均值,维度为(2,3)的数据计算完后就变成了维度为(1,3)的数据
5 文件处理
tofile() & fromfile() |
tofile()将数组中的数据以二进制格式写进文件 tofile()输出的数据不保存数组形状和元素类型等信息 fromfile()函数读回数据时需要用户指定元素类型,并对数组的形状进行适当的修改 读入数据的时候,需要设置正确的dtype参数,并且修改属组的shape属性,才会得到和原始数据一致的结果 sep参数:tofile 和 fromfile中数值的分隔符 |
save() & load() |
NumPy专用的二进制格式保存数据,它们会自动处理元素类型和形状等信息 |
savez() |
将多个数组保存到一个文件中 savez()的第一个参数是文件名,其后的参数都是需要保存的数组 没有起名的话就是'arr_0","arr_1",....起来名字的就是所起的名字 |
savez_compressed() |
在savez的基础上 进行一次数据压缩 |
ndarray写入csv |
先转化成DataFrame |
savetxt() & loadtxt() |
|
isnan |
判断ndarray里面的元素是否是NaN |
python 笔记:爱因斯坦求和 einsum_UQI-LIUWJ的博客-CSDN博客
python包介绍:numpy相关推荐
- python 包介绍:osmnx
1 osmnx介绍 一个Python 包,可检索.建模.分析和可视化来自 OpenstreetMap 的街道网络. 2 graph模块 graph类型就是networkx 包中的graph类型.所以p ...
- python包介绍:GeoPandas(初识)
1 GeoPandas介绍 GeoPandas是一个开源项目,可以更轻松地使用python处理地理空间数据. GeoPandas扩展了Pandas中使用的数据类型DataFrame,允许对几何类型进 ...
- 使用豆瓣安装python包(以numpy为例)
pip install numpy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
- anaconda怎么使用python包_Anaconda中python包的介绍与使用方法
Anaconda中python包的介绍与使用方法 目录: 1.包的定义 2.常用包管理器 3.包管理器的使用方法 4.数据科学常用的包 1.包的定义 由多个和同一功能相关的模块组成,通常为含有_ini ...
- python包和模块关系_Python包和模块的分发详细介绍
发布Python包 上一篇介绍了如何使用别人的轮子,现在我们讨论下如何自己造轮子给别人用. 作为一个流行的开源开发项目,Python拥有一个活跃的贡献者和用户支持社区,这些社区也可以让他们的软件可供其 ...
- python怎么实现输入多行文字_介绍一个Python 包,几行代码可实现 OCR 文本识别!...
点击上方 Z先生点记,加为星标 第一时间收到 Python 技术干货! 文字 OCR 识别技术现在已经相当成熟了,无论 其 准确度还是识别速度 都能够满足我们的日常需要:今天给大家介绍一个 Pytho ...
- python包的中 _init _.py文件介绍
python包的中 _init _.py文件介绍 我们新建python包时常常会看到一个__init _.py文件. 作用介绍: 一:这个文件是属于python包的,这个文件用作于标识python ...
- centos7 python3安装numpy_centos 7 下安装numpy、scipy等python包
本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...
- python包 wget_Python数据科学“冷门”库
原标题 | Lesser Known Python Libraries for Data Science 作者 | Parul Pandey 译者 | CONFIDANT(福建师范大学).Seabis ...
最新文章
- sublime使用总结
- 【Netty】主从反应器 ( Reactor ) 多线程模型
- xp 硬盘安装linux双系统,WinXP硬盘安装Ubuntu 11.10双系统全程图解
- dubbo 支持服务降级吗_dubbo面试题!会这些,说明你真正看懂了dubbo源码
- PXE 网络化安装linux系统
- 我给Apache顶级项目提了个Bug
- linux中用shell获取时间,日期
- 数据库系统工程师(软考)
- 计算机旅游网站毕业论文,旅游网站的设计与实现(毕业论文)
- 小手拍拍机器人_手指谣
- 解决在VsCode中使用CodeRunner中文乱码
- 陈年再创业:B2C必须标准化 VANCL只做男装
- 键盘按钮KeyCode使用案例
- matlab scatter3点颜色,使用for循环MATLAB时,scatter3中的系列颜色与Legend不匹配
- SuperMap iClient for MapboxGL 实现WFS查询功能
- Aborted(core dumped)
- 移动安全--22--Android应用安全防护技术
- 让数字内容被平等获取 | Android 开发者故事
- linux下oled显示设计,OLED显示问题
- 分享Python采集77个VB源码,总有一款适合您