NumPy快速入门--形状操作

文章目录

    • 1. 更改数组的形状
    • 2. 将不同数组堆叠在一起
    • 3. 将一个数组分成几个较小的数组

1. 更改数组的形状

>>> 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)

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

ravel()、reshape(m,n)、T
>>> 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)) 方法修改原始数组
>>> 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,则会自动计算该维度
>>> 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. 将不同数组堆叠在一起

  • 几个数组可以沿不同的轴堆叠在一起
>>> 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
>>> 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_ 可用于通过沿一个轴叠加数字来创建数组。它们允许使用范围字面量(“:”)

>>> 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 ,可沿水平轴拆分,通过指定要返回的均匀划分的数组数量,或指定要在其后进行划分的列
>>> 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 允许指定沿哪个轴分割。
>>> 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.]])]

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

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

相关文章

深度学习语义分割理论与实战指南.pdf

深度学习语义分割理论与实战指南 V1.0 版本已经完成,主要包括语义分割概述、关键技术组件、数据模块、经典分割网络与架构、PyTorch基本实战方法等五个部分。获取方式:扫描关注下方公众号回复 语义分割 即可。图像分类、目标检测和图像分割是基于深度学习…

Jedis工具类

目录 一、基本使用 1、xml 引入依赖 2、简单测试 二、工具类 1、编写redis属性文件 2、编写工具类 3、使用测试 Jedis是Redis官方推荐的Java连接开发工具。 一、基本使用 1、xml 引入依赖 <dependencies><dependency><groupId>redis.clients</gr…

最新鲜的美团Java面试41题(三面技术+HR面):Redis+Kafka+分布式

Java一面 hashmap与concurrenthashmap的区别 垃圾回收算法以及垃圾回收器 CMS的回收步骤 G1和CMS的区别 CMS哪个阶段是并发的哪个阶段是串行的&#xff1f; G1内部是如何分区的&#xff08;region&#xff09; HashMap如何解决Hash冲突 my sql 索引类别 什么是覆盖索引…

今年阿里双十一提升广告点击率居然用的是这种算法?!

文 | 阿里巴巴定向广告团队源 | 知乎写在前面的碎碎念这篇文章主要是介绍我们在CTR建模领域最新的工作CAN&#xff0c;CAN已经在双十一前全面在阿里定向广告落地&#xff0c;在线效果提升非常显著。一般文章会以事后的视角来写&#xff0c;这样思考会更完整&#xff0c;会屏蔽掉…

Spring之AOP实现

文章目录前言环境搭建前置业务类编写一、注解实现AOP1.编写注解实现的增强类2.在Spring配置文件中&#xff0c;注册bean&#xff0c;并增加支持注解的配置3.测试二、配置文件实现AOP1.编写自定义增强类2.Spring配置文件中&#xff0c;注册bean&#xff0c;配置增强2.测试总结前…

LeetCode 90. 子集 II(回溯+剪枝)

文章目录1. 题目信息2. 解题2.1 循环2.2 回溯1. 题目信息 给定一个可能包含重复元素的整数数组 nums&#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。 说明&#xff1a;解集不能包含重复的子集。 示例:输入: [1,2,2] 输出: [[2],[1],[1,2,2],[2,2],[1,2…

BAT研发Java面试36题总结:Spring+Redis+Docker+Dubbo

一面&#xff1a; ArrayList和linkedlist区别。ArrayList是否会越界。 ArrayList和hashset有何区别。hashset存的数是有序的么。 volatile和synchronized区别 多态的原理 数据库引擎Innodb和myisam区别 Redis的数据结构 Redis是基于内存的么 Redis的list zset的底层实现…

中文版GPT-2,可用于写小说、诗歌、新闻等

原文链接&#xff1a;https://www.sohu.com/a/336251713_610300 有人做出了中文版GPT-2&#xff0c;可用于写小说、诗歌、新闻等&#xff1b;15亿参数版GPT-2被两名研究生复现 2019-08-25 12:01 来源:量子位 </div>原标题&#xff1a;有人做出了中文版GPT-2&#xff0…

一份来自清华的数据分析笔记,请查收!

之前发过很多数据分析的文章&#xff0c;收到不少好评&#xff0c;但也有一些困惑&#xff1a;入门数据分析该学哪些知识点&#xff1f;该看哪些书&#xff1f;是从 Python入手还是 R 语言&#xff1f;常用的算法有哪些&#xff1f;练手做项目的数据库去哪里找&#xff1f;好用…

LeetCode 9. 回文数

文章目录1. 题目信息2. 解题1. 题目信息 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 1:输入: 121 输出: true 示例 2:输入: -121 输出: false 解释: 从左向右读, 为 -121 。 …

Redis系列教程(四):Redis为什么是单线程、及高并发快的3大原因详解

Redis的高并发和快速原因 1.redis是基于内存的&#xff0c;内存的读写速度非常快&#xff1b; 2.redis是单线程的&#xff0c;省去了很多上下文切换线程的时间&#xff1b; 3.redis使用多路复用技术&#xff0c;可以处理并发的连接。非阻塞IO 内部实现采用epoll&#xff0c;采…

Bing与DuckDuckGo搜索结果惊人一致?Google展现强势差异

文 | 乐乐QvQ搜索引擎之间有何不同&#xff1f;随着世界上最大的两家公司Google和Microsoft争夺Web Search空间的愈发激烈&#xff0c;一超多强的搜索格局已经形成。在目前眼花缭乱的搜索市场中&#xff0c;是搜索结果的千篇一律&#xff0c;九九归一&#xff1b;还是搜索结果的…

图解gpt-2

原文链接&#xff1a;https://www.sohu.com/a/336262203_129720 完全图解GPT-2&#xff1a;看完这篇就够了&#xff08;一&#xff09; 2019-08-25 12:47 来源:机器之心Pro </div>原标题&#xff1a;完全图解GPT-2&#xff1a;看完这篇就够了&#xff08;一&#xff0…

java程序员学习路线以及我的学习经验

本文作者为优知学院创始人陈睿&#xff08;mike&#xff09;,作者有10年以上技术&产品经验&#xff0c;曾任百度研发经理、携程定制旅游CTO。 “ 这是一篇完整的java程序员学习线路图&#xff0c;一共分为六个阶段。 我以java为例&#xff0c;展示完整的学习步骤。 最后…

这几个模型不讲“模德”,我劝它们耗子尾汁

文 | Sheryc_王苏NLP模型要以和为贵&#xff0c;要讲“模德”&#xff08;Modal&#xff09;&#xff0c;不要搞窝里斗。——《王苏老师被多模态预训练模型偷袭实录》&#xff08;全文在末尾&#xff0c;必读&#xff09;最近是不是被马保国“不讲武德”“耗子尾汁”的视频和语…

Java多线程系列(六):深入详解Synchronized同步锁的底层实现

谈到多线程就不得不谈到Synchronized&#xff0c;很多同学只会使用&#xff0c;缺不是很明白整个Synchronized的底层实现原理&#xff0c;这也是面试经常被问到的环节,比如&#xff1a; synchronized的底层实现原理 synchronized锁与JVM的实现 synchronized锁升级顺序 sync…

LeetCode 89. 格雷编码

文章目录1. 题目信息2. 解题1. 题目信息 格雷编码是一个二进制数字系统&#xff0c;在该系统中&#xff0c;两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n&#xff0c;打印其格雷编码序列。格雷编码序列必须以 0 开头。 示例 1:输入: 2 输出: [0,…