前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >NumPy快速入门--形状操作

NumPy快速入门--形状操作

作者头像
Michael阿明
发布于 2021-02-20 03:10:40
发布于 2021-02-20 03:10:40
50800
代码可运行
举报
运行总次数:0
代码可运行

1. 更改数组的形状

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import numpy as np
>>> a = np.floor(10*np.random.random((3,4)))
>>> a
array([[2., 2., 5., 6.],
       [2., 7., 4., 2.],
       [9., 3., 5., 8.]])
>>> a.shape
(3, 4)

数组的形状可通过各种命令更改。请注意,以下三个命令都返回修改后新的数组,原始数组不变

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ravel()、reshape(m,n)、T
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a.ravel()		# ravel拆开的意思,展平数组
array([2., 2., 5., 6., 2., 7., 4., 2., 9., 3., 5., 8.])
>>> a.reshape(6,2)		#返回新的修改行数列数后的数组
array([[2., 2.],
       [5., 6.],
       [2., 7.],
       [4., 2.],
       [9., 3.],
       [5., 8.]])
>>> a.T				#行列互换,转置
array([[2., 2., 9.],
       [2., 7., 3.],
       [5., 4., 5.],
       [6., 2., 8.]])
>>> a.T.shape
(4, 3)
>>> a.shape
(3, 4)

下面这段话不明白: 由ravel()产生的数组中元素的顺序通常是“C风格”,也就是说,最右边的索引“改变最快”,所以[0,0]之后的元素是[0,1] 。如果数组被重新塑造成其他形状,数组又被视为“C-style”。NumPy通常创建按此顺序存储的数组,因此ravel()通常不需要复制其参数,但如果数组是通过切片另一个数组或使用不寻常选项创建的,则可能需要复制它。函数ravel()和reshape()也可以通过使用可选参数来指示使用FORTRAN风格的数组,其中最左侧的索引更改速度最快。

  • reshape(m,n) 函数返回具有修改形状的参数,而 ndarray.resize((m,n)) 方法修改原始数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a
array([[2., 2., 5., 6.],
       [2., 7., 4., 2.],
       [9., 3., 5., 8.]])

>>> a.resize((2,6))
>>> a
array([[2., 2., 5., 6., 2., 7.],
       [4., 2., 9., 3., 5., 8.]])
  • 如果在reshape(m,n)操作中将维度指定为-1,则会自动计算该维度
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a.reshape(3,-1)		#不想算的维度设置成-1,偷懒
array([[2., 2., 5., 6.],
       [2., 7., 4., 2.],
       [9., 3., 5., 8.]])
>>> a.reshape(-1,3)
array([[2., 2., 5.],
       [6., 2., 7.],
       [4., 2., 9.],
       [3., 5., 8.]])

2. 将不同数组堆叠在一起

  • 几个数组可以沿不同的轴堆叠在一起
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[5., 7.],
       [6., 0.]])
       
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[1., 5.],
       [1., 5.]])
       
>>> np.vstack((a,b))	# v 垂向叠加
array([[5., 7.],
       [6., 0.],
       [1., 5.],
       [1., 5.]])
       
>>> np.hstack((b,a))		# h 水平叠加
array([[1., 5., 5., 7.],
       [1., 5., 6., 0.]])
  • 函数 column_stack 将1D数组作为叠加到2D数组中。它相当于仅用于二维数组的 hstack
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from numpy import newaxis
>>> np.column_stack((a,b))
array([[5., 7., 1., 5.],
       [6., 0., 1., 5.]])
       
>>> a = np.array([4,2])
>>> b = np.array([3,9])

>>> np.column_stack((a,b))
array([[4, 3],		# a、b 作为 列 向量
       [2, 9]])

>>> np.hstack((a,b))
array([4, 2, 3, 9])

>>> a[:,newaxis]		# 加入新的轴
array([[4],
       [2]])

>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[4, 3],
       [2, 9]])
>>> np.hstack((a[:,newaxis],b[:,newaxis]))		#两者结果一样
array([[4, 3],
       [2, 9]])
  • 函数 row_stack 相当于 vstack。一般来说,对于具有两个以上维度的数组,hstack 沿第二轴堆叠,vstack 沿第一轴堆叠,concatenate 允许一个可选参数,给出串接应该发生的轴。

在复杂情况下,r_c_ 可用于通过沿一个轴叠加数字来创建数组。它们允许使用范围字面量(“:”)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> np.r_[1:5,8,9]
array([1, 2, 3, 4, 8, 9])

>>> np.c_[1:3,[8,9],									    
			  [10,11]]
array([[ 1,  8, 10],
       [ 2,  9, 11]])

3. 将一个数组分成几个较小的数组

  • 使用 hsplit ,可沿水平轴拆分,通过指定要返回的均匀划分的数组数量,或指定要在其后进行划分的列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a = np.floor(10*np.random.random((2,12)))
>>> a
array([[8., 9., 8., 8., 9., 9., 3., 6., 2., 3., 3., 1.],
       [2., 5., 8., 5., 9., 2., 1., 3., 6., 1., 6., 8.]])
>>> np.hsplit(a,3)		# 将 a 分成3[array([[8., 9., 8., 8.],
       [2., 5., 8., 5.]]), array([[9., 9., 3., 6.],
       [9., 2., 1., 3.]]), array([[2., 3., 3., 1.],
       [6., 1., 6., 8.]])]
>>> np.hsplit(a,(3,4))
[array([[8., 9., 8.],
       [2., 5., 8.]]), array([[8.],
       [5.]]), array([[9., 9., 3., 6., 2., 3., 3., 1.],
       [9., 2., 1., 3., 6., 1., 6., 8.]])]
>>> np.hsplit(a,(3,5))		# 把3,4列划出来
[array([[8., 9., 8.],
       [2., 5., 8.]]), array([[8., 9.],
       [5., 9.]]), array([[9., 3., 6., 2., 3., 3., 1.],
       [2., 1., 3., 6., 1., 6., 8.]])]
  • vsplit 沿纵轴分割,并且 array_split 允许指定沿哪个轴分割。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a
array([[8., 9., 8., 8., 9., 9.],
       [3., 6., 2., 3., 3., 1.],
       [2., 5., 8., 5., 9., 2.],
       [1., 3., 6., 1., 6., 8.]])
>>> np.vsplit(a,(2,4))		# 把2,3行划出来
[array([[8., 9., 8., 8., 9., 9.],
       [3., 6., 2., 3., 3., 1.]]), 
       array([[2., 5., 8., 5., 9., 2.],[1., 3., 6., 1., 6., 8.]]), 
       array([], shape=(0, 6), dtype=float64)]
>>> np.vsplit(a,(2,3))		# 把2行划出来
[array([[8., 9., 8., 8., 9., 9.],
       [3., 6., 2., 3., 3., 1.]]), 
       array([[2., 5., 8., 5., 9., 2.]]), 
       array([[1., 3., 6., 1., 6., 8.]])]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Maven依赖报错
异常标识信息:Could not transfer artifact org.springframework.boot:spring-boot-maven-plugin(证书失效)
CodeWwang
2022/08/24
6470
Maven依赖报错
0871-6.3.2-如何基于CDH6环境编译Hudi-0.9.0并使用
1.文档编写目的 Apache Hudi是一个Data Lakes的开源方案,是Hadoop Updates and Incrementals的简写,它是由Uber开发并开源的Data Lakes解决方案。Hudi 是一个丰富的平台,用于构建具有增量数据管道的流式数据湖,具有如下基本特性/能力: Hudi能够摄入(Ingest)和管理(Manage)基于HDFS之上的大型分析数据集,主要目的是高效的减少入库延时。 Hudi基于Spark来对HDFS上的数据进行更新、插入、删除等。 Hudi在HDFS数据集上
Fayson
2022/03/21
3K0
maven入坑指南
maven是一个Java语言编写的开源项目管理工具,是Apache软件基金会的顶级项目。主要用于项目构建,依赖管理,项目信息管理。
半条命专刊
2020/09/14
6510
Apache Kylin-2.6安装部署
构建过程是一个MapReduce任务,比较耗时,构建之前确保MapReduce History Server是启动的,否则会报错
CoderJed
2021/04/13
1.1K1
深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【享学Java】
前几篇文章在讲Spring的数据绑定的时候,多次提到过数据校验。可能有人认为数据校验模块并不是那么的重要,因为硬编码都可以做。若是这么想的话,那就大错特错了~ 前面讲解DataBinder的时候一个小细节,它所在的包是:org.springframework.validation,并且在分析源码的时候能看到DataBinder它不仅能够完成数据绑定,也提供了对数据校验的支持且还保存了校验结果。
YourBatman
2019/09/03
2.1K0
深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【享学Java】
基于maven+ssm的增删改查之maven环境的搭建
1、Maven插件的设置: Window->Preferences->Maven (1)installations : 指定Maven核心程序的位置。默认是插件自带的Maven程序,可以改为我们自己解压的那个。
西西嘛呦
2020/08/26
6140
基于maven+ssm的增删改查之maven环境的搭建
本地maven仓库使用及配置
下载 nexus-2.11.4-01-bundle.zip 解压并运行C:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\bin\jsw\windows-x86-64\console-nexus.bat (不同系统选择不同目录)
肖哥哥
2019/02/22
2K0
IDEA 2021 Spring Cloud 项目搭建 步骤演示 图文解说 (基础版)
我们首先先构建父工程,这里使用的是maven项目,用spring快速项目进行构建。 注意:这里选择jdk11演示,自己也可以用其他版本如1.8
猫头虎
2024/04/07
1.2K0
IDEA 2021 Spring Cloud 项目搭建 步骤演示 图文解说 (基础版)
maven 打包jar到maven私服
六月的雨在Tencent
2024/03/28
1140
maven 打包jar到maven私服
spark2.4.0 scala2.11.12 Maven构建 pom.xml
reference case:https://blog.csdn.net/qq262593421/article/details/105768404
静谧星空TEL
2021/04/27
5550
大数据-Flink版本升级到1.17Maven中的相关依赖
https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/table/overview/
码客说
2023/09/01
2.6K0
Maven私服搭建(Nexus Repository Manager 3)
下载地址:https://help.sonatype.com/repomanager3/download
布禾
2020/10/29
3.5K0
Maven私服搭建(Nexus Repository Manager 3)
Maven依赖Jar冲突排查及解决
发生依赖冲突主要表现为系统启动或运行中会发生异常,99%表现为三种NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError。
码客说
2023/10/09
2.1K0
Maven依赖Jar冲突排查及解决
maven仓库之第二篇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
海仔
2019/10/22
9280
如何发布自己的项目到Maven中央仓库?
在Maven项目中,90%以上的jar包是通过pom文件直接从开源仓库中获取依赖jar包文件,然后在项目中进行集成使用。
程序新视界
2020/07/29
5.8K1
如何发布自己的项目到Maven中央仓库?
编译安装大数据平台权限管理组件 - Apache Ranger 3.x
进入源码目录:cd ranger,修改该目录下的pom文件,主要修改两个地方,第一是将仓库相关配置都给注释掉:
端碗吹水
2020/11/12
3.6K8
编译安装大数据平台权限管理组件 - Apache Ranger 3.x
超详细步骤!整合Apache Hudi + Flink + CDH
使用Idea打开Hudi项目,更改packging/hudi-flink-bundle的pom.xml文件,修改flink-bundle-shade-hive2 profile下的hive-version为chd6.3.0的版本
ApacheHudi
2021/11/19
3.7K0
超详细步骤!整合Apache Hudi + Flink + CDH
实战maven私有仓库三部曲之一:搭建和使用
在局域网内搭建maven私有仓库,可避免每次都从中央仓库下载公共jar包,另外将A模块作为二方库发布到私有仓库后,B模块可以很方便的引用,今天我们就来实战maven私有仓库的搭建和使用;
程序员欣宸
2022/05/06
6150
实战maven私有仓库三部曲之一:搭建和使用
大数据之Phonenix与Hbase集成
Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。 Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒。 Phoenix通过以下方式使我们可以少写代码,并且性能比我们自己写代码更好:
码客说
2022/12/16
1.6K0
大数据之Phonenix与Hbase集成
Maven使用详解
什么是Maven? 如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。 以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。 而Maven就是一款帮助程序员构建项目的工具,我们只需
大闲人柴毛毛
2018/03/09
3.1K0
相关推荐
Maven依赖报错
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档