当前位置: 首页 > news >正文

Python --NumPy库基础方法(2)

NumPy

Numpy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy支持向量处理ndarray对象,提高程序运算速度。

本期我们接着介绍numpy中的方法:

小tips

在介绍之前,说明一个jupyter notebook界面操作方法:

一个变量不需要print打印,可以直接输出结果

比如:

import numpy as np
b = np.array([1,2,3,4,5,6])
b			#直接就可以输出
------------------------------
[1 2 3 4 5 6]

一维数组索引和切片

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,并设置 start, stop及 step 参数进行,从原数组中切割出一个新数组。

#一维数组索引和切片,下标位置从0开始
x = np.arange(10)		#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])x[1]
结果:1
----------------
x[2:7:2]  #表示x从2-7的范围内,隔两步取一个值
结果:array([2, 4, 6])
------------------------------
x[2:]	#表示从第二个位置索引开始切片
结果:array([2, 3, 4, 5, 6, 7, 8, 9])

一维数组负索引和切片的使用

x = np.arange(10)
x[-2]		#负索引位置从-1开始
------------
8

二维数组的索引和切片

#二维数组的索引和切片  先索引行再索引列,精准定位切片位置。
#行、列索引都从0开始
#reshape方法改数组的形状维度x = np.arange(1,13)
a = x.reshape(3,4)		  #a=array([[ 1,  2,  3,  4],#[ 5,  6,  7,  8],#[ 9, 10, 11, 12]])#索引直接获取
a[1]  #索引行
结果:array([5, 6, 7, 8])
-------------------------
a[1][2]  #切行索引为一,列索引为2的值
结果:7
=======================================
#使用坐标获取数组a[:,1]   #所有行的第二列
结果:array([ 2,  6, 10])
-------------------------------
a[2,1]   #第三行第二列
结果:10
---------------------------------
a[::2,0]  #在第一列,隔两步取一行
结果:array([1, 9])
----------------------------------
a[(0,2),(1,2)]   #注意!!!前一个括号内的都是行坐标,第二个都是列坐标,两者一一对应
结果:array([ 2, 11])

二维数组负索引的使用

# 二维数组负索引的使用
x = np.arange(1,13)
a = x.reshape(3,4)		  #a=array([[ 1,  2,  3,  4],#[ 5,  6,  7,  8],#[ 9, 10, 11, 12]])a[-1]    #获取最后一行
结果:array([ 9, 10, 11, 12])
----------------------------
a[::-1]   #行进行倒序
结果:array([[ 9, 10, 11, 12],[ 5,  6,  7,  8],[ 1,  2,  3,  4]])
-------------------------------
a[::-1,::-1]   #行列都倒序
结果:array([[12, 11, 10,  9],[ 8,  7,  6,  5],[ 4,  3,  2,  1]])
------------------------------
a[::,::-1]   #列倒序
结果:array([[ 4,  3,  2,  1][ 8,  7,  6,  5],[12, 11, 10,  9]])

切片数组的复制

#切片数组的复制
#拷贝sub_array=a[:2,:2]
sub_array[0][0]=1000   #将切片位置的值强行替换了
sub_array
------------------------
array([[1000,    2],[   5,    6]])

改变数组的维度

通过reshape方法可以将一维数组变成二维、三维或者多维数组,也可以通过reshape方法将多维数组变成一维。

#改变数组的维度#升维
a=np.arange(24)   #一维数组
结果:array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])
----------------------------------
b=np.arange(24).reshape(4,6)  #二维数组
结果:array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]])
-------------------------------------------
c=np.arange(24).reshape(2,2,6)  #三维数组
c
结果:array([[[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11]],[[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]]])
============================
#降维
c.reshape(-1)
--------------------
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])

ravel方法和flatten方法

通过ravel方法或flatten方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置Numpy数组的shape属性(元组类型),通过resize方法也可以改变数组的维度。

#ravel方法
np.arange(24).reshape(2,2,6).ravel()
----------------------------------------
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])
=============================================
#flattn方法
np.arange(24).reshape(2,2,6).flatten()
------------------------------------------
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])

数组的拼接

函数描述
concatenate连接沿现有轴的数组序列
hstack水平堆叠序列中的数组(列方向)
vstack竖直堆叠序列中的数组(行方向)

concatenate()

concatenate 函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:

numpy.concatenate((a1, a2, ...), axis)

a1, a2, …:相同类型的数组

axis:沿着它连接数组的轴,默认为 0

列表的拼接

直接拼接:

#直接拼接
a=[1,2,3]
b=[4,5,6]
a.extend(b)
a
-----------------
[1, 2, 3, 4, 5, 6]

一维数组的拼接:

#一维数组的拼接
x = np.arange(1,4)
y = np.arange(4,7)
np.concatenate((x,y))
-----------------------------
array([1, 2, 3, 4, 5, 6])

二维数组的拼接

#二维数组的拼接   axis=0时,上下拼接。axis=1时,左右拼接。axis默认为0.#行方向的拼接
a=np.arange(24).reshape(4,6)
b=np.arange(18).reshape(3,6)
np.concatenate((a,b),axis=0)
---------------------------------
array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23],[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17]])
#列方向的拼接
a=np.arange(24).reshape(4,6)
b=np.arange(28).reshape(4,7)
# np.hstack((a,b))
np.concatenate((a,b),axis = 1)
-------------------------------------
array([[ 0,  1,  2,  3,  4,  5,  0,  1,  2,  3,  4,  5,  6],[ 6,  7,  8,  9, 10, 11,  7,  8,  9, 10, 11, 12, 13],[12, 13, 14, 15, 16, 17, 14, 15, 16, 17, 18, 19, 20],[18, 19, 20, 21, 22, 23, 21, 22, 23, 24, 25, 26, 27]])

数组的转置

将行与列对调,即第一行变成第一列…或第一列变成第一行…的操作即是转置操作。

transpose进行转换

#数组的转置   将行与列对调
#transpose()进行转置a=np.arange(1,13).reshape(2,6)
a
--------------------
array([[ 1,  2,  3,  4,  5,  6],[ 7,  8,  9, 10, 11, 12]])

二维转置

a.transpose()和a.T两种方法都可以转置

#二维转置
a.transpose()
------------------
array([[ 1,  7],[ 2,  8],[ 3,  9],[ 4, 10],[ 5, 11],[ 6, 12]])

或者:

b=np.arange(2,14).reshape(2,6)
b.T
-----------------
array([[ 2,  8],[ 3,  9],[ 4, 10],[ 5, 11],[ 6, 12],[ 7, 13]])

数组的分隔

split分隔

numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary, indices_or_sections, axis)

ary:被分割的数组

indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)

axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分

#数组分隔
#格式:split()分隔------>numpy.split(ary,indices_or_sections,axis)x = np.arange(1,9)
x
结果:array([1, 2, 3, 4, 5, 6, 7, 8])
----------------------------------------
a = np.split(x,4)
a
结果:[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]

传递数组进行分隔

x = np.arange(1,9)
b = np.split(x,[2,4])	#以传递的数组中,在第2个索引位置和第4个索引位置的前面分隔
b
[array([1, 2]), array([3, 4]), array([5, 6, 7, 8])]

水平分隔

使用hsplit函数可以水平分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示要将数组水平分隔成几个小数组。

#水平分隔:左右分隔
a = np.arange(24).reshape(4,6)
np.hsplit(a,2)		#分隔a数组,分成两份
--------------------
[array([[ 0,  1,  2],[ 6,  7,  8],[12, 13, 14],[18, 19, 20]]),array([[ 3,  4,  5],[ 9, 10, 11],[15, 16, 17],[21, 22, 23]])]

垂直分割

使用vsplit函数可以垂直分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示将数组垂直分隔成几个小数组。

#垂直分隔:上下分隔np.vsplit(a,2)
-------------------------------------
[array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11]]),array([[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]])]

总结

本篇介绍了一部分Numpy库中的方法,Numpy库很大很丰富,务必整理牢记,对接下来的学习很重要。

加强整理,要动手敲哇。

还有部分方法下期介绍哦~(常用的就剩一点咯)。

相关文章:

  • 【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法
  • Python | Leetcode Python题解之第278题第一个错误的版本
  • 系统架构设计师教程 第4章 信息安全技术基础知识-4.5 密钥管理技术4.6 访问控制及数字签名技术-解读
  • 某量JS逆向
  • 【时时三省】(C语言基础)循环语句while
  • 大模型算法面试题(十二)
  • scp 服务器复制命令
  • redis:清除缓存的最简单命令示例
  • 学习记录——day17 数据结构 队列 链式队列
  • C#中GridControl的数据源双向绑定
  • 双向门控循环神经网络(BiGRU)及其Python和MATLAB实现
  • Redis快速入门(一)
  • Spring Boot中如何实现全链路调用日志跟踪?
  • 2.axios(发送get和post请求)
  • git学习笔记(总结了常见命令与学习中遇到的问题和解决方法)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • express如何解决request entity too large问题
  • Git初体验
  • Git学习与使用心得(1)—— 初始化
  • Laravel Telescope:优雅的应用调试工具
  • LeetCode29.两数相除 JavaScript
  • MySQL的数据类型
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • springMvc学习笔记(2)
  • Vue.js 移动端适配之 vw 解决方案
  • 阿里云购买磁盘后挂载
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 区块链将重新定义世界
  • 手写双向链表LinkedList的几个常用功能
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • (2.2w字)前端单元测试之Jest详解篇
  • (8)STL算法之替换
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (void) (_x == _y)的作用
  • (二)c52学习之旅-简单了解单片机
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)RocketMQ初步认识
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 8.0 发布到 IIS
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET Framework杂记
  • ?.的用法
  • ??myeclipse+tomcat
  • @ModelAttribute 注解
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用