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库很大很丰富,务必整理牢记,对接下来的学习很重要。

加强整理,要动手敲哇。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习中的损失函数和网络优化方法

深度学习中的损失函数和网络优化方法是构建和训练神经网络的核心部分。损失函数用于衡量模型预测值与实际值之间的差距,而网络优化方法用于调整模型参数以最小化损失函数,从而提升模型的性能。以下是对损失函数和网络优化方法的详细介绍。 损失函数 损…

微信Android一面凉经(2024)

微信Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《微信Android一面凉经(2024)》。 面试职位: 微信-客户端开发工程师-基础功能(广州) And…

D语言

提起编程语言,相信大家第一时间想到的肯定都是C,但是相信资历较大的程序员们都不会忘记D语言 D语言自 1999 年发布至今已发展了 20 年 它既拥有 Java 那样强大的表现力 又具有 C 相当的性能 却因为 2.x 版本破坏性升级 导致社区大量核心开发者将其放弃。 2010 年——…

Unity GameObject: 构建游戏世界的基本元素

在Unity这个游戏开发平台中,GameObject是构成游戏世界的基础构件。无论是角色、敌人、道具还是环境元素,它们都是GameObject的不同表现形式。本文将深入探讨Unity中GameObject的概念、重要性以及如何使用它们来构建和丰富你的游戏世界。 GameObject简介…

Ubuntu22.04系统安装nodejs 14 保姆级教程

下载软件包 从NodeSource 的官方源下载并安装 Node.js 14.x 版本的软件包,适用于 Debian 和 Ubuntu 系统: curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 更新软件源 更新软件源 sudo apt-get update 下载bodejs14 下载nodejs14 sud…

双指针算法的实现(三题详解)

这是C算法基础-基础算法专栏的第十五篇文章,专栏详情请见此处。 ps:转眼间暑假已过半,我在这段时间也积累了很多文章,所以到开学(9月1日)为止,每个周我将会在周三和周六发文章(o゚▽&…

Springboot项目的行为验证码AJ-Captcha(源码解读)

目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目…

针对datax-web 中Swagger UI接口未授权访问

application.yml 添加以下配置 实现访问doc.html 以及/v2/api-docs 接口时需要进行简单的校验 swagger:basic:enable: trueusername: adminpassword: 12345 配置重启后再进行相关访问则需要输入用户名和密码

Ubuntu 24.04 LTS Noble安装 FileZilla Server

FileZilla Server 是一款使用图形用户界面快速创建 FTP 服务器的软件。它有助于测试需要 FTP 服务器功能的各种项目。虽然早期的 FileZilla FTP 服务器仅适用于 Windows 和 macOS,但现在我们也可以在 Linux(例如 Ubuntu 24.04)上安装 FileZil…

c++红黑树,插入公式

概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,因而是接近…

C++ STL set_symmetric_difference

一&#xff1a;功能 给定两个集合A&#xff0c;B&#xff1b;求出两个集合的对称差&#xff08;只属于其中一个集合&#xff0c;而不属于另一个集合的元素&#xff09;&#xff0c;即去除那些同时在A&#xff0c;B中出现的元素。 二&#xff1a;用法 #include <vector>…

【前端手写代码】手写Object.create

思路&#xff1a;将传入的对象作为原型 // 思路&#xff1a;将传入的对象作为原型 function create(obj) {function F() { }F.prototype objreturn new F() }

Go 语言单例化利器 Once

Once 可以用来执行仅仅执行一次的动作,常常被应用于单个对象的初始化场景。 1. Once 的使用方法 sync.Once 只暴露了一个方法 Do,你可以多次调用 Do 方法,但是只有第一次调用 Do 方法时参数 f 才会执行,这里的 f 是一个无参数、无返回值的函数。 func (o *Once) do(f func…

学习java第一百四十二天

ApplicationContext通常的实现是什么&#xff1f; FileSystemXmlApplicationContext &#xff1a;此容器从一个XML文件中加载beans的定义&#xff0c;XML Bean配置文件的全路径名必须提供给它的构造函数 ApplicationContext context new FileSystemXmlApplicationContext(&quo…

Docker安装 OpenResty详细教程

OpenResty 是一个基于 Nginx 的高性能 Web 平台&#xff0c;它集成了 Lua 脚本语言&#xff0c;使得开发者可以在 Nginx 服务器上轻松地进行动态 Web 应用开发。OpenResty 的核心目标是通过将 Nginx 的高性能与 Lua 的灵活性结合起来&#xff0c;提供一个强大且高效的 Web 开发…

Redis备份策略面试三道题

关于Redis备份策略的面试题&#xff0c;由简单到困难&#xff0c;可以给出以下三道题目及其参考答案&#xff1a; 1. 简单题&#xff1a;Redis支持哪些主要的备份方式&#xff1f; 参考答案&#xff1a; Redis支持两种主要的备份方式&#xff1a; RDB&#xff08;Redis Data…

Hadoop3.3.5的安装与单机/伪分布式配置

文章目录 一、安装须知二、安装jdk三、安装shh四、安装配置hadoop五、运行hadoop 一、安装须知 本次安装的Hadoop版本为hadoop3.3.5。 在这之前完成了VMware虚拟软件的安装&#xff0c;并安装了Ubuntu22.04&#xff0c;在这基础上进行相关配置。 二、安装jdk 在Ubuntu中使用…

MongoDB - 组合聚合阶段:$group、$match、$limit、$sort、$skip、$project、$count

文章目录 1. $group2. $group-> $project2.1 $group2.2 $group-> $project2.3 SpringBoot 整合 MongoDB 3. $match-> $group -> $match3.1 $match3.2 $match-> $group3.3 $match-> $group-> $match3.4 SpringBoot 整合 MongoDB 4. $match-> $group->…

cesium海洋到站提示

项目地址:Every Admin: 用于快速搭建后台管理和其他页面的项目,组件化开发,以及大屏展示. <template> <div class"topbox"> xx海洋管理 </div> <div class"selectbox"> <div class"title"> 航线列表 </div>…

以乐观心态拥抱生活,坚信美好终会降临

在人生的漫漫长河中,我们每个人都如同漂泊在波涛汹涌的大海上的一叶扁舟,时而遭遇狂风骤雨,时而沐浴温暖阳光。生活中的种种际遇,或喜或忧,或顺或逆,如同变幻莫测的风云,常常让我们心生焦虑与不安。然而,我要在这里郑重地告诉您:凡事您不必担心,会有个好结局的。这并…