NumPy数据分析基础:数组形态转换转置操作一文详解

简介: NumPy数据分析基础:数组形态转换转置操作一文详解

前言


作为数据分析三巨头Pandas、matplotlib、NumPy之一,必然要给足面子单独拿出来讲解一波。NumPy应用场景十分宽泛,Pandas很多函数转换后也都是NumPy数组类型的数据结构。在机器学习、深度学习以及一些数据处理操作中使用的频率甚至比Pandas都高。而且NumPy功能强大,使用起来也十分便捷,支持多种复杂操作。平时我的Pandas以及一些机器学习的文章都有用到NumPy,但是博客内容并没有详细解答NumPy的操作也没有记录有关NumPy操作的一些具体函数解答。对于我这种追求一站式服务需求的博主来说着实有点不妥,故把旧坑补上,出一期全新的一文速学系列-Numpy数据分析基础专栏。


此系列文章将被纳入我的专栏一文速学系列-NumPy数据分析基础,基本覆盖到使用NumPy数据分析日常业务以及常规的数学建模分析以及复杂操作方方面面的问题。从基础的数组操作逐步入门到处理矩阵矢量特征等复杂操作,以及专业的NumPy常用函数讲解,我都将花费了大量时间和心思创作,如果大家有需要从事数据分析或者数据开发、数学建模、Python工程的朋友推荐订阅专栏,将在第一时间学习到最实用常用的知识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。


本篇文章将主要讲述ndarray数组的形态操作以及相关函数的使用。


一、更改数组的形状


数组的形状由沿每个轴的元素数给出:

rg = np.random.default_rng(1)
a = np.floor(10 * rg.random((3, 4)))
a

25d9579a990e4db68f17a2342724bd1a.png

可以使用各种命令更改阵列的形状。以下三个命令都会返回修改后的数组,但不会更改原始数组:


1.变为一维数组


a.ravel()


acf6658d417e480aaaa4c522d86c9840.png

2.重塑数组


a.reshape(6, 2)

bf147505ec5e4f6b9ac8d19a7821aae1.png


3.数组转置


a.T


a0c506ebfbc649ac831c04858c557375.png

ravel产生的数组中元素的顺序通常是“C样式”,即最右边的索引“变化最快”,因此[0,0]后面的元素是[0,1]。如果阵列被重塑为其他形状,则该阵列再次被视为“C样式”。NumPy通常创建按此顺序存储的数组,因此ravel通常不需要复制其参数,但如果数组是通过获取另一个数组的切片或使用异常选项创建的,则可能需要复制它。还可以使用一个可选参数,指示函数ravel和reconforme使用FORTRAN样式的数组,其中最左边的索引变化最快。


整形函数使用修改后的形状返回参数,而ndarray函数返回参数。resize方法修改数组本身:


a.resize((2, 6))
a

cd16c79240e74b7e9f9c117c5d300e1a.png


如果在整形操作中某个尺寸给定为-1,则会自动计算其他尺寸:


a.reshape(3, -1)

e799990e2ad9415fa4797b2122e75dd6.png

二、数组堆叠


几个数组可以沿着不同的轴堆叠在一起:

a = np.floor(10 * rg.random((2, 2)))
a
b = np.floor(10 * rg.random((2, 2)))
b
np.vstack((a, b))
np.hstack((a, b))


3eb24366ad8140dbb197bb8e3dafae5f.png

函数column_stack将1D数组作为列堆叠到2D数组中。它仅相当于二维阵列的hstack:

from numpy import newaxis
np.column_stack((a, b)) 
a = np.array([4., 2.])
b = np.array([3., 8.])
np.column_stack((a, b))

69c3377c3bbb47fca11baca876991555.png

但是对于一维矩阵是不一样的


np.hstack((a, b))


341697075faa426d9dbd683aa1dbde7d.png

newaxis是numpy中的一个函数,顾名思义,就是插入新维度的意思,比如将一维数组变成二维数组,二维变成三维等。


a[:, newaxis]

0d7e667f5a634735a1d0026ed42052c1.png

np.column_stack((a[:, newaxis], b[:, newaxis]))
np.hstack((a[:, newaxis], b[:, newaxis]))

411d7a54667d48b69e6f5a48128b6786.png


另一方面,对于任何输入数组,函数row_stack都等效于vstack。实际上,row_stack是vstack的别名:


通常,对于二维以上的数组,hstack沿第二轴堆栈,vstack沿第一轴堆栈,concatenate允许一个可选参数,给出应沿其进行连接的轴的数量。


在复杂的情况下,r_和c_对于通过沿一个轴叠加数字来创建阵列很有用。它们允许使用范围文字:

np.r_[1:4, 0, 4]

fdacc2642b34431f8ac4f9f014c085a1.png

当与数组一起用作参数时,r_和c_在默认行为上类似于vstack和hstack,但允许使用一个可选参数给出要连接的轴的数量。


三、拆分矩阵


使用hsplit,可以沿着数组的水平轴拆分数组,方法是指定要返回的等形状数组的数目,或者指定应该在其之后进行拆分的列:

a = np.floor(10 * rg.random((2, 12)))
a
np.hsplit(a, 3)
np.hsplit(a, (3, 4))


513bc3f03d1a4ee2bdf35d90c4aaff6b.png


vsplit沿垂直轴拆分,arraysplit允许指定要沿哪个轴拆分。

目录
相关文章
|
3月前
|
数据处理 索引 Python
NumPy 数组操作:和普通操作相较,到底蕴含着怎样令人费解的独特魅力?
【8月更文挑战第19天】NumPy是Python科学计算核心库,提供高效数组操作。不同于Python列表直接列举创建,NumPy用`np.array()`创建数组。两者都支持索引和切片,但NumPy性能更优。数学运算方面,NumPy支持简洁的向量化操作,如`my_array * 2`,无需循环。NumPy还简化了数组形状变换,如使用`reshape()`方法。此外,NumPy数组要求元素类型一致,提高了内存使用效率和计算速度。这些特点使NumPy在科学计算和数据分析中不可或缺。
30 0
|
27天前
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
32 1
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
65 10
|
27天前
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
23 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
28天前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
42 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
30天前
|
Python
使用 NumPy 进行数组操作的示例
使用 NumPy 进行数组操作的示例
|
1月前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
82 4
|
1月前
|
机器学习/深度学习 并行计算 调度
CuPy:将 NumPy 数组调度到 GPU 上运行
CuPy:将 NumPy 数组调度到 GPU 上运行
49 1
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
37 1
|
2月前
|
Python
numpy | 插入不定长字符数组测试OK
本文介绍了如何在numpy中创建和操作不定长字符数组,包括插入和截断操作的测试。