机器学习常用包numpy篇(二)数组属性与基本操作

目录

前言

数组属性

1.数组转置

2.数组元素的数据类型

3.数组元素的虚部

4.数组元素的实部

5.数组包含的元素个数

6.数组元素的字节数

7.数组元素的总字节

8.数组维度

9.数组形状

10.每个维度中步进的字节数组

11.数组维度和形状

数组基本操作

1.重设形状

2.数组展开变成1维

3.轴移动(类似 仿射变换)

4.轴交换

5.数组转置

6.维度改变

7.类型转换

8.数组连接

9.数组堆叠

10.拆分

11.删除

12.数组插入

13.附加

14.重设尺寸

15.翻转数组


前言

上一篇:机器学习入门常用包-numpy篇(一)数组生成-CSDN博客

以二维数组为例子,进行数组属性和操作讲解。

先创建一个二维数组a

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a)  # 查看 a 的值

运行示例

数组属性

1.数组转置

ndarray.T 用于数组的转置,与 .transpose() 相同

print(a.T)
print(a.transpose())

运行示例

2.数组元素的数据类型

ndarray.dtype 用来输出数组包含元素的数据类型

print(a.dtype)

运行示例

3.数组元素的虚部

ndarray.imag 用来输出数组包含元素的虚部

print(a.imag)

运行示例

4.数组元素的实部

ndarray.real用来输出数组包含元素的实部

print(a.real)

运行示例

5.数组包含的元素个数

ndarray.size用来输出数组中的总包含元素数

print(a.size)

运行示例

6.数组元素的字节数

ndarray.itemsize输出一个数组元素的字节数(单个元素的字节是多少)

print(a.itemsize)

运行示例

7.数组元素的总字节

ndarray.nbytes用来输出数组的元素总字节数

print(a.nbytes)

运行示例

8.数组维度

ndarray.ndim用来输出数组维度

print(a.ndim)

运行示例

9.数组形状

ndarray.shape用来输出数组形状

print(a.shape)

运行示例

10.每个维度中步进的字节数组

ndarray.strides用来遍历数组时,输出每个维度中步进的字节数组

解释:a数组(行和列)每邻行之间相差3*8,每邻列之间相差1*8

print(a.strides)

运行示例

11.数组维度和形状

.shape 得到的形状实际上是数组在每个轴 Axis 上面的元素数量,而 .shape 的长度的表明了数组的维度。

运行示例

one = np.array([7, 2, 9, 10])
two = np.array([[5.2, 3.0, 4.5],[9.1, 0.1, 0.3]])
three = np.array([[[1, 1], [1, 1], [1, 1]],[[1, 1], [1, 1], [1, 1]],[[1, 1], [1, 1], [1, 1]],[[1, 1], [1, 1], [1, 1]]])
print(one.shape, two.shape, three.shape)        

数组基本操作

1.重设形状

reshape 可以在不改变数组数据的同时,改变数组的形状。其中,numpy.reshape() 等效于 ndarray.reshape()reshape 方法非常简单:

numpy.reshape(a, newshape)

其中,a 表示原数组,newshape 用于指定新的形状(整数或者元组)

b=np.arange(10).reshape((5, 2))

运行示例

2.数组展开变成1维

ravel 的目的是将任意形状的数组扁平化,变为 1 维数组。ravel 方法如下:

numpy.ravel(a, order='C')

其中,a 表示需要处理的数组。order 表示变换时的读取顺序,默认是按照行依次读取,当 order='F' 时,可以按列依次读取排序

a = np.arange(10).reshape((2, 5))
print(a)
c=np.ravel(a)
d=np.ravel(a, order='F')
print(c,d)

3.轴移动(类似 仿射变换)

moveaxis 可以将数组的轴移动到新的位置。其方法如下:

numpy.moveaxis(a, source, destination)

参数说明:

  • a:数组。
  • source:要移动的轴的原始位置。
  • destination:要移动的轴的目标位置。
a = np.ones((1, 2, 3))
np.moveaxis(a, 0, -1)

你可能没有看明白是什么意思,我们可以输出二者的 shape 属性:

print(a.shape, np.moveaxis(a, 0, -1).shape)

运行示例

4.轴交换

和 moveaxis 不同的是,swapaxes 可以用来交换数组的轴。其方法如下:

numpy.swapaxes(a, axis1, axis2)

参数说明:

  • a:数组。
  • axis1:需要交换的轴 1 位置。
  • axis2:需要与轴 1 交换位置的轴 1 位置。
a = np.ones((1, 4, 3))
f = np.swapaxes(a, 0, 2)
print(a)
print(f)

运行示例

5.数组转置

transpose 类似于矩阵的转置,它可以将 2 维数组的横轴和纵轴交换。其方法如下:

numpy.transpose(a, axes=None)

参数说明:

  • a:数组。
  • axis:该值默认为 none,表示转置。如果有值,那么则按照值替换轴。
a = np.arange(4).reshape(2, 2)
g = np.transpose(a)
print(a)
print(g)

运行示例

6.维度改变

atleast_xd 支持将输入数据直接视为 维。这里的 x 可以表示:1,2,3。方法分别为:

numpy.atleast_1d()
numpy.atleast_2d()
numpy.atleast_3d()

print(np.atleast_1d([1, 2, 3]))
print(np.atleast_2d([4, 5, 6]))
print(np.atleast_3d([7, 8, 9]))

运行示例

7.类型转换

在 NumPy 中,还有一系列以 as 开头的方法,它们可以将特定输入转换为数组,亦可将数组转换为矩阵、标量,ndarray 等。如下:

  • asarray(a,dtype,order):将特定输入转换为数组。
  • asanyarray(a,dtype,order):将特定输入转换为 ndarray
  • asmatrix(data,dtype):将特定输入转换为矩阵。
  • asfarray(a,dtype):将特定输入转换为 float 类型的数组。
  • asarray_chkfinite(a,dtype,order):将特定输入转换为数组,检查 NaN 或 infs
  • asscalar(a):将大小为 1 的数组转换为标量。

这里以 asmatrix(data,dtype) 方法举例:

a = np.arange(4).reshape(2, 2)
h = np.asmatrix(a)  # 将二维数组转化为矩阵类型
print(a)
print(h)

运行示例

8.数组连接

concatenate 可以将多个数组沿指定轴连接在一起。其方法为:

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

参数说明:

  • (a1, a2, ...):需要连接的数组。
  • axis:指定连接轴。
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8], [9, 10]])
c = np.array([[11, 12]])np.concatenate((a, b, c), axis=0)

运行示例

这里,我们可以尝试沿着横轴连接。但要保证连接处的维数一致,所以这里用到了 .T 转置。

a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8, 9]])np.concatenate((a, b.T), axis=1)

运行示例

9.数组堆叠

在 NumPy 中,以下方法可用于数组的堆叠:

  • stack(arrays,axis):沿着新轴连接数组的序列。
  • column_stack():将 1 维数组作为列堆叠到 2 维数组中。
  • hstack():按水平方向堆叠数组。
  • vstack():按垂直方向堆叠数组。
  • dstack():按深度方向堆叠数组。

这里以 stack(arrays,axis) 方法举例:

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.stack((a, b))
print(c)

运行示例

当然,也可以横着堆叠。

d = np.stack((a, b), axis=-1)
print(d)

运行示例

10.拆分

split 及与之相似的一系列方法主要是用于数组的拆分,列举如下:

  • split(ary,indices_or_sections,axis):将数组拆分为多个子数组。
  • dsplit(ary,indices_or_sections):按深度方向将数组拆分成多个子数组。
  • hsplit(ary,indices_or_sections):按水平方向将数组拆分成多个子数组。
  • vsplit(ary,indices_or_sections):按垂直方向将数组拆分成多个子数组。

下面,我们看一看 split 到底有什么效果:

a = np.arange(10)
np.split(a, 5)

运行示例

除了 1 维数组,更高维度也是可以直接拆分的。例如,我们可以将下面的数组按行拆分为 2。

a = np.arange(10).reshape(2, 5)
np.split(a, 2)

运行示例

NumPy 中还有针对数组元素添加或移除的一些方法。

11.删除

首先是 delete 删除:

  • delete(arr,obj,axis):沿特定轴删除数组中的子数组。
a = np.arange(12).reshape(3, 4)
b = np.delete(a, 2, 1)
print(a)
print(b)

运行示例

这里代表沿着横轴,将第 3 列(索引 2)删除。当然,你也可以沿着纵轴,将第三行删除。

np.delete(a, 2, 0)

运行示例

12.数组插入

再看一看 insert 插入,用法和 delete 很相似,只是需要在第三个参数位置设置需要插入的数组对象:

  • insert(arr,obj,values,axis):依据索引在特定轴之前插入值。
a = np.arange(12).reshape(3, 4)
b = np.arange(4)c = np.insert(a, 2, b, 0)
print(a)
print(b)
print(c)

运行示例

13.附加

append 的用法也非常简单。只需要设置好需要附加的值和轴位置就好了。它其实相当于只能在末尾插入的 insert,所以少了一个指定索引的参数。

  • append(arr,values,axis):将值附加到数组的末尾,并返回 1 维数组。
a = np.arange(6).reshape(2, 3)
b = np.arange(3)np.append(a, b)

注意 append 方法返回值,默认是展平状态下的 1 维数组。

运行示例

14.重设尺寸

resize 很好理解,直接举例子:

  • resize(a,new_shape):对数组尺寸进行重新设定。
a = np.arange(10)
print(a)
a.resize(2, 5)
print(a)

你可能会纳闷了,这个 resize 看起来和上面的 reshape 一样呢,都是改变数组原有的形状。

其实,它们是有区别的,区别在于对原数组的影响。reshape 在改变形状时,不会影响原数组,相当于对原数组做了一份拷贝。而 resize 则是对原数组执行操作。

运行示例

15.翻转数组

在 NumPy 中,我们还可以对数组进行翻转操作:

  • fliplr(m):左右翻转数组。
  • flipud(m):上下翻转数组。
a = np.arange(16).reshape(4, 4)
print(a)
print(np.fliplr(a))
print(np.flipud(a))

运行示例

以上为笔者的学习笔记,如有不妥,希望各位批评指正0v0

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

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

相关文章

【vue3|第23期】Vite + Vue3: 深入理解public和assets文件夹的作用与使用

日期:2024年8月14日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

GBJ406-ASEMI无人机专用GBJ406

编辑:ll GBJ406-ASEMI无人机专用GBJ406 型号:GBJ406 品牌:ASEMI 封装:GBJ-4 批号:2024 现货:50000 最大重复峰值反向电压:600V 最大正向平均整流电流(Vdss):4A 功率(Pd)&am…

“从零开始的HTML 表格”——WEB开发系列09

HTML 表格是一种用于在网页上组织和显示信息的结构性元素&#xff0c;它能够将数据以行和列的形式呈现&#xff0c;帮助用户更清晰地理解数据关系。表格在展示统计数据、产品列表、日程安排等方面非常实用。 一、HTML 表格的基本结构 HTML 表格用 ​​<table>​​ 标签来…

day36——homework

二、基于UDP的TFTP文件传输 1&#xff09;tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&am…

MySQL源码安装与MySQL基础学习

1、安装MySQL ​ 本次安装使用的是绿色硬盘版本&#xff0c;无需额外安装依赖环境&#xff0c;比较简单 修改相关配置文件&#xff1a; 设置环境变量&#xff0c;声明/宣告MySQL命令便于系统识别&#xff1a; 初始化数据库&#xff1a; 设置系统识别&#xff0c;进行操作&…

Java基础之隐式类型转换

类型转换 基本数据类型表示范围大小排序&#xff1a; 在变量赋值及算术运算的过程中&#xff0c;经常会用到数据类型转换&#xff0c;其分为两类&#xff1a; 隐式类型转换 显式类型转换 1 隐式类型转换 情形1&#xff1a;赋值过程中&#xff0c;小数据类型值或变量可以直…

八股文学习总结

八股文学习总结 文章目录 八股文学习总结一、总体概况二、Java基础三、集合四、JUC五、JVM六、MYSQL七、Redis八、MQ九、计网十、OS十一、附上我记的笔记 一、总体概况 八股文也看了好多天了&#xff0c;我对八股文基本上考察哪些点也都有了印象&#xff0c;主要的分为Java基础…

Spring-AOP实现后置、返回、异常和环绕通知

后置通知 在切入点的目标方法执行后&#xff08;无论有异常抛出没的&#xff09;&#xff0c;都会执行这个通知方法! 如果想要在通知方法里访问到目标方法返回的结果&#xff0c;可以用返回通知 返回通知 是在目标方法执行之后没有异常&#xff0c;并且返回结果后才执行通知…

【自用】Python爬虫学习(七):selenium网页自动化操作

Python爬虫学习&#xff08;七&#xff09; selenium介绍selenium基础用法selenium其他自动化操作selenium动作链与iframe的处理selenium无可视化界面与反检测实现 selenium介绍 selenium是一个广泛使用的开源自动化测试框架&#xff0c;主要用于Web应用程序的功能测试。它支持…

机器学习速成第二集——监督学习之分类(理论部分)!

目录 分类算法的种类 分类问题的应用场景 模型选择与评估 结论 如何在不同数据集中选择最适合的监督学习分类算法&#xff1f; 监督学习中集成模型与单一模型相比有哪些具体的优势和劣势&#xff1f; 优势&#xff1a; 劣势&#xff1a; 在处理高维稀疏数据时&#xf…

Kubernetes-K8S

Kubernetes由于单词太长&#xff0c;省略掉中间8个字母简称为K8S。它介于应用服务和服务器之间。能够通过策略协调和管理多个服务&#xff0c;只需要一个YAML文件配置。定义应用的部署顺序等信息&#xff0c;自动部署应用到各个服务器&#xff0c;还可以自动扩容缩容。 架构原理…

K8S资源之Service

概念 将一组 Pods 公开为网络服务的抽象方法。 ClientIP 模型 集群内访问类型。 命令行 # 暴露端口 kubectl expose deployment my-dep-nginx --port8000 --target-port80Yml文件 apiVersion: v1 kind: Service metadata:labels:app: my-dep-nginxname: my-dep-nginx spe…

【张】#12 enum 枚举

enum 枚举定义格式&#xff1a; enum <类型名> {<枚举常量表> }; 枚举其实就是一个整数 enum example {Aa,Bb10,Cc //给Bb赋值为10后&#xff0c;Cc的值会变成11 }; 枚举变量只能使用枚举值&#xff0c;枚举可以赋值给整型&#xff0c;整型不能赋值给枚举 #inc…

Django | 从中间件的角度理解跨站请求伪造(Cross-Site Request Forgey)[CSRF攻击]

文章目录 切入点案例测试views.py测试代码templates模板下的html文件配置路由运行服务 出现CSRF报错解决CRSF报错再次运行服务 查看结果 切入点 某些恶意网站上包含链接、表单按钮或者]avaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作 Gj…

HTML+CSS进阶用法(上)——平面转换、渐变、空间转换

欢迎来到CSS变换的世界&#xff0c;这里充满了创意和可能性。在本篇博客中&#xff0c;我们将一起学习如何使用transform属性来实现各种平面和空间转换效果&#xff0c;包括位移、旋转、缩放&#xff0c;以及如何通过渐变和动画来增强我们的网页设计。无论你是初学者还是有经验…

并发编程(第二天)

interrupt 方法详解 打断 sleep&#xff0c;wait&#xff0c;join 的线程 这几个方法都会让线程进入阻塞状态 打断 sleep 的线程, 会清空打断状态打断正常运行的线程 打断正常运行的线程, 不会清空打断状态打断 park 线程 打断 park 线程, 不会清空打断状态 如果打断标记已经…

【Python】线性规划模型(笔记)

线性规划的作用 求一个线性目标函数在线性可行域内的最值问题 线性规划的典型应用 配送运输问题&#xff1a;选大车还是小车生产规划问题&#xff1a;每种原料各买多少几何切割问题&#xff1a;切割长宽各多少买卖利润问题&#xff1a;最多能挣多少钱… 线性规划的本质 问…

C语言FTP文件传输(完成基本文件传输的功能)

文章目录 前言一、实现思路二、实现FTP服务器三、实现FTP客户端四、实现体验总结 前言 本篇文章带大家来完成一下C语言FTP文件传输助手最基础的功能&#xff0c;也就是客户端和服务器之间进行最基础的文件传输的功能。 一、实现思路 实现一个基本的 FTP 客户端和服务器&…

【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】

一个加速语言模型生成的方法 现在语言模型的一个弊端speculative decoding预言家预测的问题 speculative decoding 模块的实现方法NAT Non-autoregressive模型压缩使用搜索引擎 一些更复杂些的speculative decoding 实现方式 speculative decoding 是一个适用于目前生成模型的加…

WSL 忘记ubuntu的密码

文章目录 1. 以管理员身份打开 PowerShel2.输入命令 wsl.exe -d Ubuntu-20.04 --user root3.输入命令 passwd username 修改用户密码&#xff0c;username即待重置的用户的名称 1. 以管理员身份打开 PowerShel 2.输入命令 wsl.exe -d Ubuntu-20.04 --user root 注意版本号是自…