Numpy(4)—Numpy 数组操作(修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除

news2024/9/21 22:38:37

Numpy 数组操作

(1)修改数组形状
import numpy as np
 
a = np.arange(8)
print ('原始数组:')
print (a)
print ('\n')
 
b = a.reshape(4,2)
print ('修改后的数组:')
print (b)

在这里插入图片描述

1)numpy.ndarray.flat
import numpy as np
 
a = np.arange(9).reshape(3,3) 
print ('原始数组:')
for row in a:
    print (row)
 
#对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print ('迭代后的数组:')
for element in a.flat:
    print (element)

在这里插入图片描述

2)numpy.ndarray.flatten
numpy.ndarray.flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
import numpy as np
 
a = np.arange(8).reshape(2,4)
 
print ('原数组:')
print (a)
print ('\n')
# 默认按行
 
print ('展开的数组:')
print (a.flatten())
print ('\n')
 
print ('以 F 风格顺序展开的数组:')
print (a.flatten(order = 'F'))
# 'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序

在这里插入图片描述

3)numpy.ravel
numpy.ravel() 展平的数组元素,顺序通常是"C风格"
import numpy as np
 
a = np.arange(8).reshape(2,4)
 
print ('原数组:')
print (a)
print ('\n')
 
print ('调用 ravel 函数之后:')
print (a.ravel())
print ('\n')
 
print ('以 F 风格顺序调用 ravel 函数之后:')
print (a.ravel(order = 'F'))

在这里插入图片描述

(2)翻转数组
1)numpy.transpose,用于对换数组的维度
import numpy as np
 
a = np.arange(12).reshape(3,4)
 
print ('原数组:')
print (a )
print ('\n')
 
print ('对换数组:')
print (np.transpose(a))

在这里插入图片描述

2)numpy.ndarray.T 用于转置数组
import numpy as np
 
a = np.arange(12).reshape(3,4)
 
print ('原数组:')
print (a)
print ('\n')
 
print ('转置数组:')
print (a.T)

在这里插入图片描述

3)numpy.rollaxis
numpy.rollaxis 函数向后滚动特定的轴到一个特定位置
调用 np.rollaxis(a,2,1) 将轴2滚动到轴1之前(相当于轴1和2位置交换),函数结果:轴序0,1,2变更为0, 2, 1
import numpy as np
 
# 创建了三维的 ndarray
a = np.arange(8).reshape(2,2,2)
 
print ('原数组:')
print (a)
print ('获取数组中一个值:')
print(np.where(a==6))   
print(a[1,1,0])  # 为 6
print ('\n')
 
 
# 将轴 2 滚动到轴 0之前
 
print ('调用 rollaxis 函数:')
b = np.rollaxis(a,2,0)
print (b)
# 查看元素 a[1,1,0],即 6 的坐标,变成 [0, 1, 1]
# 最后一个 0 移动到最前面
print(np.where(b==6))   
print ('\n')
 
# 将轴 2 滚动到轴 1之前

print ('调用 rollaxis 函数:')
c = np.rollaxis(a,2,1)
print (c)
# 查看元素 a[1,1,0],即 6 的坐标,变成 [1, 0, 1]
# 最后的 0 和 它前面的 1 对换位置
print(np.where(c==6))   
print ('\n')

在这里插入图片描述
在这里插入图片描述

4)numpy.swapaxes 函数用于交换数组的两个轴
import numpy as np

# 创建了三维的 ndarray
a = np.arange(8).reshape(2, 2, 2)

print('原数组:')
print(a)
print('\n')
# 现在交换轴 0(深度方向)到轴 2(宽度方向)

print('调用 swapaxes 函数后的数组:')
print(np.swapaxes(a, 2, 0))

在这里插入图片描述

(3)修改数组维度
1)numpy.broadcast用于模仿广播的对象,它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果
import numpy as np
 
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])  
 
# 对 y 广播 x
b = np.broadcast(x,y)  
# 它拥有 iterator 属性,基于自身组件的迭代器元组
 
print ('对 y 广播 x:')
r,c = b.iters
 
# Python3.x 为 next(context) ,Python2.x 为 context.next()
print (next(r), next(c))
print (next(r), next(c))
print ('\n')
# shape 属性返回广播对象的形状
 
print ('广播对象的形状:')
print (b.shape)
print ('\n')
# 手动使用 broadcast 将 x 与 y 相加
b = np.broadcast(x,y)
c = np.empty(b.shape)
 
print ('手动使用 broadcast 将 x 与 y 相加:')
print (c.shape)
print ('\n')
c.flat = [u + v for (u,v) in b]
 
print ('调用 flat 函数:')
print (c)
print ('\n')
# 获得了和 NumPy 内建的广播支持相同的结果
 
print ('x 与 y 的和:')
print (x + y)

在这里插入图片描述
在这里插入图片描述

2)numpy.broadcast_to 函数将数组广播到新形状
import numpy as np

a = np.arange(4).reshape(1, 4)

print('原数组:')
print(a)
print('\n')

print('调用 broadcast_to 函数之后:')
print(np.broadcast_to(a, (4, 4)))

在这里插入图片描述

4)numpy.expand_dims函数通过在指定位置插入新的轴来扩展数组形状
import numpy as np
 
x = np.array(([1,2],[3,4]))
 
print ('数组 x:')
print (x)
print ('\n')
y = np.expand_dims(x, axis = 0)
 
print ('数组 y:')
print (y)
print ('\n')
 
print ('数组 x 和 y 的形状:')
print (x.shape, y.shape)
print ('\n')
# 在位置 1 插入轴
y = np.expand_dims(x, axis = 1)
 
print ('在位置 1 插入轴之后的数组 y:')
print (y)
print ('\n')
 
print ('x.ndim 和 y.ndim:')
print (x.ndim,y.ndim)
print ('\n')
 
print ('x.shape 和 y.shape:')
print (x.shape, y.shape)

在这里插入图片描述
在这里插入图片描述

5)numpy.squeeze函数从给定数组的形状中删除一维的条目
import numpy as np
 
x = np.arange(9).reshape(1,3,3)
 
print ('数组 x:')
print (x)
print ('\n')
y = np.squeeze(x)
 
print ('数组 y:')
print (y)
print ('\n')
 
print ('数组 x 和 y 的形状:')
print (x.shape, y.shape)

在这里插入图片描述

(4)连接数组
1)numpy.concatenate 函数用于沿指定轴连接相同形状的两个或多个数组
import numpy as np

a = np.array([[1, 2], [3, 4]])

print('第一个数组:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])

print('第二个数组:')
print(b)
print('\n')
# 两个数组的维度相同

print('沿轴 0 连接两个数组:')
print(np.concatenate((a, b)))
print('\n')

print('沿轴 1 连接两个数组:')
print(np.concatenate((a, b), axis=1))

在这里插入图片描述

2)numpy.stack 函数用于沿新轴连接数组序列

在这里插入图片描述
在这里插入图片描述

3)numpy.hstack是 numpy.stack 函数的变体,它通过水平堆叠来生成数组。
import numpy as np
 
a = np.array([[1,2],[3,4]])
 
print ('第一个数组:')
print (a)
print ('\n')
b = np.array([[5,6],[7,8]])
 
print ('第二个数组:')
print (b)
print ('\n')
 
print ('水平堆叠:')
c = np.hstack((a,b))
print (c)
print ('\n')

在这里插入图片描述

4)numpy.vstack是 numpy.stack 函数的变体,它通过垂直堆叠来生成数组
import numpy as np

a = np.array([[1, 2], [3, 4]])

print('第一个数组:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])

print('第二个数组:')
print(b)
print('\n')

print('竖直堆叠:')
c = np.vstack((a, b))
print(c)

在这里插入图片描述

(5)分割数组
1)numpy.split函数沿特定的轴将数组分割为子数组
import numpy as np
 
a = np.arange(9)
 
print ('第一个数组:')
print (a)
print ('\n')
 
print ('将数组分为三个大小相等的子数组:')
b = np.split(a,3)
print (b)
print ('\n')
 
print ('将数组在一维数组中表明的位置分割:')
b = np.split(a,[4,7])
print (b)

在这里插入图片描述

import numpy as np

a = np.arange(16).reshape(4, 4)
print('第一个数组:')
print(a)
print('\n')
print('默认分割(0轴):')
b = np.split(a,2)
print(b)
print('\n')

print('沿水平方向分割:')
c = np.split(a,2,1)
print(c)
print('\n')

在这里插入图片描述

2)numpy.hsplit 函数用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组
import numpy as np
 
harr = np.floor(10 * np.random.random((2, 6)))
print ('原array:')
print(harr)
 
print ('拆分后:')
print(np.hsplit(harr, 3))

在这里插入图片描述

3)numpy.vsplit 沿着垂直轴分割,其分割方式与hsplit用法相同
import numpy as np
 
a = np.arange(16).reshape(4,4)
 
print ('第一个数组:')
print (a)
print ('\n')
 
print ('竖直分割:')
b = np.vsplit(a,2)
print (b)

在这里插入图片描述

(6)数组元素的添加与删除

在这里插入图片描述

1)numpy.resize函数返回指定大小的新数组
import numpy as np
 
a = np.array([[1,2,3],[4,5,6]])
 
print ('第一个数组:')
print (a)
print ('\n')
 
print ('第一个数组的形状:')
print (a.shape)
print ('\n')
b = np.resize(a, (3,2))
 
print ('第二个数组:')
print (b)
print ('\n')
 
print ('第二个数组的形状:')
print (b.shape)
print ('\n')
# 要注意 a 的第一行在 b 中重复出现,因为尺寸变大了
 
print ('修改第二个数组的大小:')
b = np.resize(a,(3,3))
print (b)

在这里插入图片描述
在这里插入图片描述

2)numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中。 此外,输入数组的维度必须匹配否则将生成ValueError。
import numpy as np
 
a = np.array([[1,2,3],[4,5,6]])
 
print ('第一个数组:')
print (a)
print ('\n')
 
print ('向数组添加元素:')
print (np.append(a, [7,8,9]))
print ('\n')
 
print ('沿轴 0 添加元素:')
print (np.append(a, [[7,8,9]],axis = 0))
print ('\n')
 
print ('沿轴 1 添加元素:')
print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))

在这里插入图片描述

3)numpy.insert 函数在给定索引之前,沿给定轴在输入数组中插入值。
import numpy as np
 
a = np.array([[1,2],[3,4],[5,6]])
 
print ('第一个数组:')
print (a)
print ('\n')
 
print ('未传递 Axis 参数。 在删除之前输入数组会被展开。')
print (np.insert(a,3,[11,12]))
print ('\n')
print ('传递了 Axis 参数。 会广播值数组来配输入数组。')
 
print ('沿轴 0 广播:')
print (np.insert(a,1,[11],axis = 0))
print ('\n')
 
print ('沿轴 1 广播:')
print (np.insert(a,1,11,axis = 1))

在这里插入图片描述

4)numpy.delete 函数返回从输入数组中删除指定子数组的新数组。 与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开。
import numpy as np
 
a = np.arange(12).reshape(3,4)
 
print ('第一个数组:')
print (a)
print ('\n')
 
print ('未传递 Axis 参数。 在插入之前输入数组会被展开。')
print (np.delete(a,5))
print ('\n')
 
print ('删除第二列:')
print (np.delete(a,1,axis = 1))
print ('\n')
 
print ('包含从数组中删除的替代值的切片:')
a = np.array([1,2,3,4,5,6,7,8,9,10])
print (np.delete(a, np.s_[::2]))

在这里插入图片描述

5)numpy.unique 函数用于去除数组中的重复元素

在这里插入图片描述

import numpy as np
 
a = np.array([5,2,6,2,7,5,6,8,2,9])
 
print ('第一个数组:')
print (a)
print ('\n')
 
print ('第一个数组的去重值:')
u = np.unique(a)
print (u)
print ('\n')
 
print ('去重数组的索引数组:')
u,indices = np.unique(a, return_index = True)
print (indices)
print ('\n')
 
print ('我们可以看到每个和原数组下标对应的数值:')
print (a)
print ('\n')
 
print ('去重数组的下标:')
u,indices = np.unique(a,return_inverse = True)
print (u)
print ('\n')
 
print ('下标为:')
print (indices)
print ('\n')
 
print ('使用下标重构原数组:')
print (u[indices])
print ('\n')
 
print ('返回去重元素的重复数量:')
u,indices = np.unique(a,return_counts = True)
print (u)
print (indices)

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【ARM体系结构】之寄存器与三级流水线

1、ARM核的寄存器组织 1.1 寄存器概念介绍 控制器:控制程序运行,进行取指令操作,并将指令给到对应的运算器执行指令。 运算器:执行汇编指令,执行指令需要的使用的数据来源于寄存器,并将执行的执行结果返回…

如何在服务器上安装相应的依赖和包

我感觉这一篇的逻辑写的比较奇怪,于是想重写一篇。 python setup.py install报错“error: can‘t create or remove files in install directory”_ACMSunny的博客-CSDN博客 开始遇到的问题是要跑的程序数据太大,咱们通常会将本机上的Python程序和数据…

MIT6.830-2022-lab6实验思路详细讲解

系列目录 lab1 地址 : lab1 lab2 地址 :lab2 lab3 地址 :lab3 lab4 地址 :lab4 lab5 地址 :lab5 lab6 地址 :lab6 文章目录系列目录一、实验概述SimpleDB日志格式steal/force策略:二、实验正文Exercise 1 - rollbackExercise 2 - Recovery总结一、实验概述 In this lab y…

【SAP Fiori】X档案:Node.js 与 SAPUI5 开发环境的安装与配置

Node.js 与 SAPUI5 开发环境的安装与配置一、安装Node.js1、下载2、安装3、配置环境变量4、验证5、更改路径6、更改镜像源二、安装 Vue.js1、安装Vue2、查看版本三、安装webpack1、安装webpack2、安装webpack-cli3、验证是否安装成功四、新建Vue项目1、创建项目2、启动项目五、…

使用NoneBot2可视化平台搭建QQ聊天机器人:本地和云部署教程

NoneBot是一个基于Python 3.8的异步、开源和可扩展的框架,用于构建和运行聊天机器人,支持各种聊天平台,如Telegram,Discord和WeChat。它是基于nonebot库构建的,提供了一个易于使用的界面,用于创建聊天机器人…

Python爬虫之Scrapy框架系列(7)——XXTop250电影简介信息的获取及存储到本地

前面简单爬取了某Top250电影的一些信息。本文,来尝试搞到每个电影的简介信息。 目录:1. 获取电影简介信息1.1 第一步:配对每个电影对应的简介信息:First:包含电影简介信息url的获取Second:爬虫文件的更改Th…

Java和Scala中关键字package指定的是源文件的存放路径吗?

无为也,则用天下而有余;有为也,则为天下用而不足🔬 目录 Scala代码演示 Java代码演示 总结 写在前面: 包(package)不是约定源文件存放的位置,而是约定源文件编译后生成的字节码…

数据挖掘,计算机网络、操作系统刷题笔记37

数据挖掘,计算机网络、操作系统刷题笔记37 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

Scanpy 单细胞测序基因分析

参考:https://www.bilibili.com/video/BV1sq4y1C7Qx/ https://scanpy-tutorials.readthedocs.io/en/latest/pbmc3k.html 代码下载:scanpy分析scRNA-seq数据基本流程(含scanpy seurat两大工具对比) 链接: https://pan.baidu.com/s…

SCSS函数——Map

SCSS函数——MapSCSS函数——MapMap的简单声明Map取值遍历Map获取值实现换肤效果1. 设置用户可以选择的主题2.创建主题需要颜色的Map集合3.在使用SCSS文件中导入函数和Scss文件4.构建一个themeCombine函数动态创建类名5.使用each对变量进行遍历Map函数1.get()取值函数2.deep-re…

STM32F10x数据手册之GPIO手册记录

前言 1、本文根据数据手册进行记录 2、由于手册的逻辑结构是呈现为总体到具体的结构,导致查看的时候不方便,所以在此记录,方便回顾 GPIO–输入模式 对比分析: 1、在此模式下,向GPIO口,输出高低电平是无效的。 2、GPIO初始电平与…

PHP反序列化新手入门学习总结

最近写了点反序列化的题,才疏学浅,希望对CTF新手有所帮助,有啥错误还请大师傅们批评指正。 php反序列化简单理解 首先我们需要理解什么是序列化,什么是反序列化? PHP序列化:serialize() 序列化是将变量…

DW 2023年1月Free Excel 第八次打卡 Excel数据可视化

第八章Excel数据可视化 数据下载地址与参考链接:https://d9ty988ekq.feishu.cn/docx/Wdqld1mVroyTJmxicTTcrfXYnDd 1 条形图 案例1 打开data/chap8/8.1xlsx中的【案例1】,现在有湖北区2022/01/01的不同商品的销售额。 问题1:如何更加直观…

Java基础11:正则表达式

Java基础11:正则表达式一、匹配规则1. 字符类(只匹配一个字符)2. 预定义字符(只匹配一个字符)3. 数量词二、Pattern三、Matcher四、在字符串方法中的使用1. matches2. replaceAll3. split五、 PatternMatcher示例1. 爬…

【自然语言处理】主题建模:基于 LDA 实现

主题建模:基于 LDA 实现主题建模是一种常见的自然语言处理任务。隐含的狄利克雷分布(Latent Dirichlet Allocation,LDA)是其中一种实现算法,其核心思想如下图所示。 主题建模的方法也比较多,除了本文提到的…

MySQL架构概述

MySQL架构 对MySQL服务端架构的概述,包括逻辑架构、并发控制、事务和MVCC(多版本并发控制)等内容。 逻辑架构 连接/线程管理 最上层负责与客户端交互,包括连接处理、身份验证、确保安全性等。 解析器、优化器 MySQL核心能力都在…

机器学习从入门到进阶所需学习资料-包括书、视频、源码

本文整理了一些入门到进阶机器学习所需要的一些免费的精品视频课程,一些优质的书籍和经典的代码实战项目。本文整理自网络,源地址:https://github.com/linxid/Machine_Learning_Study_Path视频1.1 吴恩达老师机器学习课程:•Cours…

【【黑马SpringCloud(2)】微服务调用

服务调用和网关Feign远程调用Feign自定义配置Feign性能优化使用连接池代替默认的URLConnection解决重复代码继承方式抽取方式Gateway服务网关gateway快速入门断言过滤器全局过滤器过滤器执行顺序:跨域问题Feign远程调用 RestTemplate发起远程调用的代码&#xff1a…

走进 CSS

看完本篇博客,你能收获: 👉 了解 CSS 是什么?👉 学会 CSS 怎么用?👉 CSS的选择器👉 如何用 CSS 美化网页 文章目录01 CSS 是什么?02 CSS的发展史03 CSS 快速入门04 CSS的…

唯一索引范围查询锁 bug修复了

唯一索引范围查询锁 bug修复了 其他资料介绍入下: session A 是一个范围查询,按照原则 1 的话,应该是索引 id 上只加 (10,15] 这个 next-key lock ,并且因 为 id 是唯一键,所以循环判断到 id15 这一行就应该停止了。…