【数据分析之Numpy基础003】数组形状大变身!轻松掌握改变数组形状的技巧

        处理数组的一项重要工作就是改变数组的维度,包括提高数组的维度和降低数组的维度,还包括数组的转置、拼接、分隔等。

        Numpy为大家提供了大量的API可以很轻松的完成这些数组的操作。

1、改变数组的维度

        如上篇文章使用到的reshape方法,将一维数组转化成多维数组;ravel方法或flatten方法将多维数组转化为一维数组。还可以直接设置ndarray的shape属性,通过resize方法也可以改变数组的维度。

例:

# 改变数组的维度

import numpy as np

# 创建一维数组

arr = np.arange(32)

print('arr:', arr)

print('arr的维度为', arr.shape)

# 使用reshape方法将一维数组转为多维数组

arr_mult = arr.reshape(4,2,4)

print('arr_mult:', arr_mult)

print('arr_mult的维度为', arr_mult.shape)

# 转为二维数组

arr_two = arr.reshape(4,8)

print('arr_two:', arr_two)

print('arr_two的维度为', arr_two.shape)

# 使用 ravel 函数将三维的 arr_mult 变成一维的数组

arr_one = arr_mult.ravel()

print('arr_one:', arr_one)

# 使用 flatten 函数将二维的 arr_two 变成一维的数组

arr_one1 = arr_two.flatten()

print('arr_one1:', arr_one1)

2、数组的拼接

        数组的拼接分为水平拼接垂直拼接

        对于一维或多维数组来说,水平拼接就是列拼接,改变列数不改变行数,垂直拼接就是就是行拼接,改变行数不改变列数。

        需要注意的是:

        1)水平拼接必须要满足一个条件,就是所有参与水平拼接的数组的行数必须相同,否则进行水平拼接会抛出异常。垂直拼接同理。

        2)多维数组拼接时,需要相同类型的数组才可以拼接,否则会抛出异常。

        (1)一维数组水平拼接

        通过hstack函数可以将两个或多个数组水平拼接成一个数组

例:

import numpy as np

arr1 = np.arange(6).reshape(2,3)

print('arr1:', arr1)

arr2 = np.arange(6, 12).reshape(2,3)

print('arr2:', arr2)

arr_conca = np.hstack([arr1, arr2])

print('arr_conca:', arr_conca)

        (2)一维数组垂直拼接

        通过vstack函数可以将两个或多个数组垂直拼接成一个数组

例:

import numpy as np

arr1 = np.arange(6).reshape(2,3)

print('arr1:', arr1)

arr2 = np.arange(6, 12).reshape(2,3)

print('arr2:', arr2)

arr_conca = np.vstack([arr1, arr2])

print('arr_conca:', arr_conca)

 

        (3)concatenate 函数

        numpy还是提供了concatenate 函数用于沿指定轴拼接相同形状的多个数组,具体语法如下:

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

        其中:参数a1,a2,...指相同类型的数组;axis指沿着它连接数组的轴,默认为0(垂直方向)

例:

arr1 = np.arange(6).reshape(2,3)

print('arr1:', arr1)

arr2 = np.arange(6, 12).reshape(2,3)

print('arr2:', arr2)

arr_conca = np.concatenate([arr1, arr2])

print('arr_conca:', arr_conca)

arr_conca1 = np.concatenate([arr1, arr2],axis=0)

print('垂直拼接:', arr_conca1)

arr_conca2 = np.concatenate([arr1, arr2],axis=1)

print('水平拼接:', arr_conca2)

 

        (4)多维数组的拼接

arr_thr1 = np.arange(24).reshape(2, 3, 4)

print('arr_thr1:', arr_thr1)

arr_thr2 = np.arange(8, 24).reshape(2, 2, 4)

print('arr_thr2:', arr_thr2)

arr_thr3 = np.arange(16).reshape(2, 2, 4)

print('arr_thr3:', arr_thr3)

print('三维数组水平拼接'.center(30, '-'))

arr_conca_h_thr = np.hstack([arr_thr1, arr_thr2])

print('三维数组水平拼接arr_conca_h_thr:', arr_conca_h_thr)

print('三维数组arr_conca_h_thr的形状:', arr_conca_h_thr.shape)

print('三维数组垂直拼接'.center(30, '-'))

arr_conca_v_thr = np.vstack([arr_thr2, arr_thr3])

print('三维数组垂直拼接arr_conca_v_thr:', arr_conca_v_thr)

print('三维数组arr_conca_v_thr的形状:', arr_conca_v_thr.shape)

print('三维数组水平拼接'.center(30, '-'))

arr_conca_h_thr1 = np.concatenate([arr_thr1, arr_thr2], axis=1)

print('三维数组水平拼接arr_conca_h_thr1:', arr_conca_h_thr1)

print('三维数组arr_conca_h_thr1的形状:', arr_conca_h_thr1.shape)

 

3、数组的分隔

        分隔数组是拼接数组的逆过程,与拼接数组一样,分隔数组也分为水平分隔数组和垂直分隔数组。水平分隔数组与水平拼接数组对应。水平拼接数组是将两个或多个数组水平进行收尾相接,而水平分隔数组是将已经水平拼接到一起的数组再分开。

        在numpy中,常常使用numpy.split函数指定分隔的轴来分割数组。

        其语法格式如下:

numpy.split(array, indices_or_sections, axis)

其中:

        array:被分隔的数组

        indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,就为沿轴切分的位置(索引号)

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

例:

        分隔一维数组

# 数组分隔

x = np.arange(8)

# 传递整数进行分隔

arr = np.split(x, 4)

print('arr:', arr)

print('arr[0]:', arr[0])

print('arr[1]:', arr[1])

print('arr[2]:', arr[2])

print('arr[3]:', arr[3])

# 传递数组进行分隔

arr1 = np.split(x,[2,4])

print('arr1:', arr1)

 

        分隔二维数组

# 二维数组分隔

x = np.arange(12).reshape(4, 3)

print('x:', x)

# 沿垂直方向,平均分隔

arr = np.split(x, 2, axis=0)

print('arr[0]:', arr[0])

print('arr[1]:', arr[1])

# 沿水平方向,按位置分隔

arr1 = np.split(x, [1], axis=1)

print('arr1:', arr1)

 

        (1)水平分隔

        numpy也单独提供了水平分隔与垂直分隔的函数,分别为hsplit()与vsplit()。话不多说,直接上代码。

x = np.arange(12).reshape(3, 4)

print('x:', x)

arr = np.hsplit(x, 2)

print('arr[0]:', arr[0])

print('arr[1]:', arr[1])

 

        (2)垂直分隔

x = np.arange(12).reshape(4, 3)

print('x:', x)

arr = np.vsplit(x, [2])

print('arr[0]:', arr[0])

print('arr[1]:', arr[1])

arr1 = np.vsplit(x, [1, 3])

print('位置1的数组')

print(arr1[0])

print('位置3的数组')

print(arr1[1])

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

各国的通胀是多少?央行又使用那些指标?昂首资本1分钟分享

各国的通胀是多少?央行又使用哪些指标?今天昂首资本1分钟快速分享 在美国和欧盟,作为一个中期通胀目标,使用了一个目标指标,通常是为长达两年的前景计算的。在美国和欧盟,中期通胀目标是2%。在俄罗斯&…

【NCom】:通过高温气相合成调节Pt-CeO2相互作用以提高晶格氧的还原性

摘要:在这项工作中,我们比较了通过两种方法制备的 Pt 单原子催化剂(SAC)的 CO 氧化性能:(1)传统的湿化学合成(强静电吸附strong electrostatic adsorption–SEA)&#xf…

Mybatis总结--传参

MyBatis 传递参数:从 java 代码中把参数传递到 mapper.xml 文件 六、一个简单参数: Dao 接口中方法的参数只有一个简单类型( java 基本类型和 String ), 占位符 #{ 任意字符 } ,和方法的参数名无关…

电脑msvcp100.dll丢失了怎么办?msvcp100.dll丢失的5种解决方法

当计算机系统中无法找到msvcp100.dll文件,或者遭遇msvcp100.dll丢失的情况时,可能会引发一系列运行问题和功能障碍。msvcp100.dll是Microsoft Visual C Redistributable Package的一部分,这是一个至关重要的动态链接库文件,对于许…

如何利用EXCEL批量插入图片

目录 1.excel打开目标表格; 2.点开视图-宏-录制宏,可以改宏的名字或者选择默认; 3.然后点开视图-宏-查看宏 4.点编辑进去 5.修改代码: (1)打开之后会显示有一堆代码 (2)将这个…

【C++进阶】STL容器--list底层剖析(迭代器封装)

目录 前言 list的结构与框架 list迭代器 list的插入和删除 insert erase list析构函数和拷贝构造 析构函数 拷贝构造 赋值重载 迭代器拷贝构造、析构函数实现问题 const迭代器 思考 总结 前言 前边我们了解了list的一些使用及其注意事项,今天我们进一步深入…

132 Linux 系统编程9 ,IO操作,lseek 函数,truncate函数,查看文件的表示形式

一 lseek 函数 函数说明:此函数用于文件偏移 Linux中可使用系统函数lseek来修改文件偏移量(读写位置) 每个打开的文件都记录着当前读写位置,打开文件时读写位置是0,表示文件开头,通常读写多少个字节就会将读写位置往后移多少个字…

PixPin:一键搞定截图、长截图、贴图、GIF

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是PixPin?①PixPin②核心功…

C语言每日一题(61)盛最多水的容器

题目链接 力扣 11 盛最多水的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水…

flet 读取本地音频文件的信息,歌名,歌手,歌曲长度,封面

请先安装 pip install flet, tinytag 组件 tinytag 是用来读取音频文件的信息的 测试用最好找一个有封面的音频的文件, 我是windows电脑,打开预览模式,选中文件时候能够右边显示图片, 如下,我电脑上某个音频文件的封面 import flet as ft from tinytag import TinyTag import…

全方位了解CRM系统:功能、种类和费用详细解说

尽管CRM已经横空出世20余年,但在国内普及率依旧不足20%。很多企业管理者、业务负责人对CRM是什么?CRM的作用、类型和价格等概念一头雾水。希望通过这篇文章深入浅出的讲解让大家对CRM管理软件从陌生到熟知。 一、CRM是什么? 什么是CRM&…

nginx高级配置详解

目录 一、网页的状态页 1、状态页的基本配置 2、搭配验证模块使用 3、结合白名单使用 二、nginx 第三方模块 1、echo模块 1.1 编译安装echo模块 1.2 配置echo模块 三、nginx变量 1、内置变量 2、自定义变量 四、自定义图标 五、自定义访问日志 1、自定义日志格式…

Informer:高效长序列时间序列预测模型(更新中)

文章行文思路: 目录 一、背景:1.时间序列介绍:2.LSTF介绍:3.Transformer与Informer的关系: 二、Transformer:1.Transformer简介:2.Transformer整体架构:3.模型输入:3.1第…

SSRF靶场实战

SSRF(curl) SSRF(file_get_content)

源代码管理——码云Gitee

目录 Git安装 Gitee配置SSH 源代码管理常规操作 1.idea配置git 2.常规操作 Git安装 安装Git是进行源代码管理的基本步骤之一。以下是在本地安装Git的通用步骤,适用于Windows系统: 下载Git安装程序: 访问Git官网的下载页面:Git官网下载地…

day16_ListSet课后练习题 - 参考答案

文章目录 day16_课后练习题第1题第2题第3题第4题第5题第6题第7题第8题 day16_课后练习题 第1题 案例: ​ 1、用一个String[]数组存点数 ​ 2、用一个String[]数组存花色 ​ 3、用一个String[]数组存大王、小王 ​ 4、用上面的数组,生成一副扑克牌 …

keepalived+HAProxy+MySQL双主实验

keepalivedHAProxyMySQL双主实验 环境准备 node1(HAProxy1):192.168.184.10 node2(HAProxy2):192.168.184.20 node3(MySQL1):192.168.184.30 node4(MySQL2):192.168.184.40 虚拟IP vip:192.168.184.100MySQL部署 在node3执行以下脚本: #!/bin/bash sy…

智能枪弹柜管理系统-智能枪弹管理系统DW-S306

随着社会的发展和治安形势的日益严峻,对于枪弹的管理变得尤为重要。传统的手工记录和存放方式已经无法满足现代化、高效化、安全化的需求。因此,智能枪弹柜管理系统应运而 生。 在建设万兆主干、千兆终端的监控专网的基础上,弹药库安全技术…

Web性能优化-详细讲解与实用方法-MDN文档学习笔记

Web性能优化 查看更多学习笔记:GitHub:LoveEmiliaForever MDN中文官网 性能优良的网站能够提高访问者留存和用户满意度,减少客户端和服务器之间传输的数据量可降低各方的成本 不同的业务目标和用户需求需要不同的性能度量,要提高…

LangChain Agent v0.2.0简明教程 (上)

快速入门指南 – LangChain中文网 langchain源码剖析系列课程 九天玩转Langchain! 1. LangChain是什么2. LangChain Expression Language (LCEL)Runnable 接口3. Model I/O3.1 Prompt Templates3.2 Language Model3.3 Output ParsersUse case(Q&A with RAG)1. LangChain…