Numpy数组的转置和轴交换的实现

 更新时间:2023年03月27日 09:59:06   作者:算力鬼才信  
本文主要介绍了Numpy数组的转置和轴交换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

NumPy 数组在进行转置时不会实际移动内存中的任何数据 位置只是改变对原始矩阵的索引方式 ,比如我原来是行索引现在变为列索引了

转置是一种视图并不是对原数组的复制数组转置拥有transpose方法,也有特殊的T属性

对于numpy数组的转置仅限于一维和二维数组,使用的是 numpy中的T 属性

创建一个0-15的一维数组,并且对它进行了数组重组,变为 2 x 2 x 4的三维数组,并对它进行转置

import  numpy as np
#创建一个三维数组,这个三维数组的形状是 2 x 2 x 4 ,三维数组包括两个二维数组,二维数组中包含两个一维数组,一维数组的数组维度长度是 4
arr = np.arange(16)
arr2 = arr.reshape(4,-1)
arr3 = arr.T
0

我们通过数组的迭代来检查numpy数组的转置是否对原数组位置做了改变,这里我们要引用numpy.nditer() 方法

对原数组进行迭代:

arr = np.arange(16)
arr2 = arr.reshape(4,-1)
for x in np.nditer(arr2): # 需要注意的是for循环的末尾一定要加上 冒号(:)
 print(x,end=" ")

我们对通过 arr2的转置数组arr3做迭代

arr = np.arange(16)
arr2 = arr.reshape(4,-1)
arr3 = arr2.T
for xx in np.nditer(arr3):
 print(xx,end=" ")

可以发现他们的打印结果未发生任何变化,所以可以证实,数组转置并不是改变了原数组的元素位置,只是改变了它的索引方式。

其实我可以告诉你,一个最终结果,原数组和对原数组的转置在内存中是共享数据的,,类似于家里的小狗叫做旺旺 和小黄,其实指的是是一个东西

在这里需要注意的是,在数组转置下对数组作修改一定会影响到原数组

例如:

arr = np.arange(10).reshape(2,5)
arr2 = arr.T
#为了方便理解我上述说的意思,我引用下面的实例
#对arr2中的某一数组作以修改
print(arr)  # 原数组
arr2[2][1] = 200  #在原数组转置后,对其中 某一个元素做修改
print(arr2)  # 打印对原数组转之后的数组
print(arr)   #打印原数组

发现了什么我们最初定义的数组被篡改了,不知道大家对数组的转置和原数组公用一个内存位置的概念的理解是否变得容易

array.transpose() 轴交换

虽然,transpose方法可以实现转置,但是它的真正用途是轴交换,我前面提到.T 方法只适合用于一二数组,三维,四维就要用到transpose()方法。

transpose() 方法中的参数和数组的维度有关,拿三位数组来说共需要三个参数分别是,

transpose(x,y,z)其中的参数分别对应0,1,2,只需要变换轴对应数字参数的顺序就可以将数组进行轴的变换。

原数组对应的参数顺序是,transpose(0,1,2)

import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr)
arr2 = arr.transpose((0,2,1))  #我在这里改变了列和纵深的顺序
print(arr2)

经过轴交换后arr数组打印结果

这一块比较难于理解,我也是看了好久现在也是马马虎虎,我可以告诉大家一个比较笨的方法

请记住,(x,y,z)或者(0,1,2)分别代表行轴,列轴,纵深轴,transpose 方法是对它们的轴进行了交换。

到此这篇关于Numpy数组的转置和轴交换的实现的文章就介绍到这了,更多相关Numpy数组转置和轴交换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现完整的事务操作示例

    Python实现完整的事务操作示例

    这篇文章主要介绍了Python实现完整的事务操作,结合实例形式分析了Python操作mysql数据库相关事务操作的具体流程与实现技巧,需要的朋友可以参考下
    2017-06-06
  • Python实现脚本转换为命令行程序

    Python实现脚本转换为命令行程序

    使用Python中的scaffold和click库,你可以将一个简单的实用程序升级为一个成熟的命令行界面工具,本文就来带你看看具体实现方法,感兴趣的可以了解下
    2022-09-09
  • python numpy存取文件的方式

    python numpy存取文件的方式

    NumPy提供了多种存取数组内容的文件操作函数。保存数组数据的文件可以是二进制格式或者文本格式。这篇文章主要介绍了python利用numpy存取文件,需要的朋友可以参考下
    2019-09-09
  • python实现读取并显示图片的两种方法

    python实现读取并显示图片的两种方法

    本篇文章主要介绍python实现读取并显示图片的两种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 机器学习的框架偏向于Python的13个原因

    机器学习的框架偏向于Python的13个原因

    这篇文章主要为大家详细介绍了机器学习的框架偏向于Python的13个原因,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Tkinter canvas的画布参数,删除组件,添加垂直滚动条详解

    Tkinter canvas的画布参数,删除组件,添加垂直滚动条详解

    这篇文章主要介绍了python tkinter 画布参数,删除组件,添加垂直滚动条使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • python os用法总结

    python os用法总结

    本篇文章给大家分享了关于python os用法的相关总结性内容,对此有学习需要朋友参考下吧。
    2018-06-06
  • Django基础CBV装饰器和中间件的应用示例

    Django基础CBV装饰器和中间件的应用示例

    这篇文章主要为大家介绍了Django基础CBV装饰器和中间件的应用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Python 如何访问外围作用域中的变量

    Python 如何访问外围作用域中的变量

    这篇文章主要介绍了Python 如何访问外围作用域中的变量的相关资料,需要的朋友可以参考下
    2016-09-09
  • django开发教程之利用缓存文件进行页面缓存的方法

    django开发教程之利用缓存文件进行页面缓存的方法

    缓存相信对各位程序员们来说都不陌生,下面这篇文章主要给大家介绍了关于django开发教程之利用缓存文件进行页面缓存的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11

最新评论