当前位置: 首页 > news >正文

NumPy 系列(四):numpy 数组的变形

4.1 数组的转置

数组的转置方法为 .T,其只对矩阵有效,因此遇到向量要先将其转化为矩阵。

(1)向量的转置

import numpy as np
arr1=np.arange(12)
print(arr1)
arr2=np.arange(1,4)
print(arr2)
arr3=np.arange(2,12)
print(arr3)
[ 0  1  2  3  4  5  6  7  8  9 10 11]
[1 2 3]
[ 2  3  4  5  6  7  8  9 10 11]
arr4=arr1.reshape(1,-1) # 升级为矩阵
print(arr4)
arr5=arr2.reshape((1,-1)) # 自适应
print(arr5)
arr6=arr3.reshape(1,-1).T # 矩阵转置
print(arr6)
arr7=arr3.reshape(-1,1) # 另外一种转置
print(arr7)
[[ 0  1  2  3  4  5  6  7  8  9 10 11]]
[[1 2 3]]
[[ 2][ 3][ 4][ 5][ 6][ 7][ 8][ 9][10][11]]
[[ 2][ 3][ 4][ 5][ 6][ 7][ 8][ 9][10][11]]

(2)矩阵的转置

行矩阵的转置刚演示了,列矩阵的转置如示例所示。

import numpy as np
arr1=np.arange(4).reshape(-1,1)
arr2=arr1.T
print(arr1,'\n\n',arr2)
[[0][1][2][3]] [[0 1 2 3]]
arr3=np.arange(6).reshape(2,3)
arr4=arr3.T
print(arr3,"\n\n",arr4)
[[0 1 2][3 4 5]] [[0 3][1 4][2 5]]

4.2 数组的翻转

数组的翻转方法有两个,一个是上下翻转的 np.flipud( ) ,表示 up-down;
一个是左右翻转的 np.fliplr( ),表示 left-right。其中,向量只能使用 np.flipud( ),
在数学中,向量并不是横着排的,而是竖着排的。

(1)向量的翻转

import numpy as np
arr1=np.arange(10)
arr2=np.flipud(arr1)
print(arr1,"\n\n",arr2)
[0 1 2 3 4 5 6 7 8 9] [9 8 7 6 5 4 3 2 1 0]

(2)矩阵的翻转

import numpy as np
arr1=np.arange(20).reshape(4,5)
arr1_ud=np.flipud(arr1)
arr1_lr=np.fliplr(arr1)
print(arr1,"\n\n",arr1_ud)
print("\n\n",arr1,"\n\n",arr1_lr)
[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]] [[15 16 17 18 19][10 11 12 13 14][ 5  6  7  8  9][ 0  1  2  3  4]][[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]] [[ 4  3  2  1  0][ 9  8  7  6  5][14 13 12 11 10][19 18 17 16 15]]

4.3 数组的重塑

想要重塑数组的形状,需要用到 .reshape( ) 方法。

前面说过,给定了其他维度的数值,剩下一个维度可以填-1,让它自己去计
算。比如把一个 5 行 6 列的矩阵重塑为 3 行 10 列的矩阵,当列的参数 10 告诉
它,行的参数直接可以用-1 来替代,它会自己去用 30 除以 10 来计算。

(1)向量的变形

import numpy as np
arr1=np.arange(10)
print(arr1)
[0 1 2 3 4 5 6 7 8 9]
arr2=arr1.reshape(2,5)
print(arr2)
[[0 1 2 3 4][5 6 7 8 9]]

(2)矩阵的变形

import numpy as np
arr1=np.array([[2,34,5],[6,76,12]])
arr2=arr1.reshape(3,2) # 变形为矩阵
arr3=arr1.reshape(-1) # 变形为向量
print(arr2)
print(arr3)
[[ 2 34][ 5  6][76 12]]
[ 2 34  5  6 76 12]

4.4 数组的拼接

(1)向量的拼接

两个向量拼接,将得到一个新的加长版向量。

import numpy as np
arr1=np.arange(10)
arr2=np.array([1,2,46,787])
arr3=np.concatenate([arr1,arr2]) # 注意:要用列表传参
print(arr3)
[  0   1   2   3   4   5   6   7   8   9   1   2  46 787]

(2)矩阵的拼接

两个矩阵可以按不同的维度进行拼接,但拼接时必须注意维度的吻合。

import numpy as np
arr1=np.array([[4,3,2,1],[11,22,33,44]])
arr2=np.array([[1,2,46,787]])
arr3=np.array([[777],[888]])
arr4=np.concatenate([arr1,arr2],axis=0) # 按照行拼接,此时axis可省略
arr5=np.concatenate([arr1,arr3],axis=1) # 按照列拼接
print(arr4)
print(arr5)
[[  4   3   2   1][ 11  22  33  44][  1   2  46 787]]
[[  4   3   2   1 777][ 11  22  33  44 888]]

最后要说明的是,向量和矩阵不能进行拼接,必须先把向量升级为矩阵。

4.5 数组的分裂

(1)向量的分裂

向量分裂,将得到若干个更短的向量。

import numpy as np
arr=np.arange(10,100,10)
print(arr)
arr1,arr2,arr3=np.split(arr,[2,8])
print(arr1)
print(arr2)
print(arr3)
[10 20 30 40 50 60 70 80 90]
[10 20]
[30 40 50 60 70 80]
[90]

np.split( )函数中,给出的第二个参数[2,8]表示在索引[2]和索引[8]的位置截断。

(2)矩阵的分裂

矩阵的分裂同样可以按不同的维度进行,分裂出来的均为矩阵。

import numpy as np
arr=np.arange(1,9).reshape(2,4)
print(arr)
[[1 2 3 4][5 6 7 8]]
arr1,arr2=np.split(arr,[1]) # 默认axis=0,按行分割
print(arr1,'\n\n',arr2) # 输出的是!!矩阵!!
[[1 2 3 4]] [[5 6 7 8]]
arr3,arr4,arr5=np.split(arr,[1,3],axis=1) # 按列分割
print(arr3,'\n\n',arr4,'\n\n',arr5)
[[1][5]] [[2 3][6 7]] [[4][8]]
http://www.dtcms.com/a/394622.html

相关文章:

  • 【Zod 】数据校验新范式:Zod 在 TypeScript 项目中的实战指南
  • 「React实战面试题」useEffect依赖数组的常见陷阱
  • 系统架构设计师部分计算题解析
  • 3.1 BP神经网络结构(反向传播算法)
  • 2026:具身智能软件——开发者工具、范式与方向
  • linux收集离线安装包及依赖包
  • ✅ Python租房数据分析系统 Django+requests爬虫+Echarts可视化 贝壳网全国数据 大数据
  • FREERTOS任务TCB与任务链表的关系-重点
  • C++入门(内含命名空间、IO、缺省参数、函数重载、引用、内联函数、auto关键字、新式范围for循环、关键字nullptr的超全详细讲解!)
  • 红黑树的介绍
  • NumPy 系列(六):numpy 数组函数
  • 手写链路追踪-日志追踪性能分析
  • 数据库自增字段归零(id)从1开始累加
  • 轻量级本地化解决方案:实现填空题识别与答案分离的自动化流程
  • P1104 生日-普及-
  • CMake如何添加.C.H文件
  • 实时数据如何实现同步?一文讲清数据同步方式
  • 六、Java框架
  • 施耐德 M340 M580 数据移动指令 EXTRACT
  • 4. 引用的本质
  • 专业历史知识智能体系统设计与实现
  • 算法基础篇(4)枚举
  • 【C++】二叉搜索树及其模拟实现
  • 第二十一讲:C++异常
  • 2025年9月第2周AI资讯
  • 从 UNet 到 UCTransNet:一次分割项目中 BCE Loss 失效的踩坑记录
  • leetcode刷题记录2(java)
  • JAVA八股文——方法区
  • 链表操作与反转
  • AI编程 -- 学习笔记