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数组转置和轴交换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python numpy数组转置与轴变换

    这篇文章主要介绍了Python numpy数组转置与轴变换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 矩阵的转置 >>> import numpy as np >>> arr=np.arange(15).reshape((3,5)) >>> arr array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) >>&

  • Numpy数组转置的两种实现方法

    Numpy数组转置很容易,两种写法 np_array = np.array([[1, 2], [3, 4]]) np_array.transpose() np.transpose(np_array) 但是一维数组转置的时候有个坑,光transpose没有用,需要指定shape参数 array_1d = np.array([1, 2]) print array_1d.shape, array_1d.transpose() array_1d.shape = (2, 1) print array_1d

  • numpy中的高维数组转置实例

    numpy中的ndarray很适合数组运算 transpose是用来转置的一个函数,很容易让人困惑,其实它是对矩阵索引顺序的一次调整.原先矩阵是一个三维矩阵,索引顺序是x,y,z,角标分别是0.1.2,经过上图(1,0,2)调整后就成了y,x,z. 理解了这些,那么swapaxes方法也就不难理解了 以上这篇numpy中的高维数组转置实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: Numpy中转置transpose.T和swapaxes的

  • 对numpy下的轴交换transpose和swapaxes的示例解读

    如下所示: 解读: transpose( ) 方法的参数是一个 由 轴编号(轴编号自0 开始) 序列构成的 元组. 开始时,数组的轴编号序列是默认从 0开始的 :0,1,2,, 坐标的顺序也是这个轴编号的顺序,(0,1,2) 当使用 transpose 时候,轴编号的顺序变成了 (1,0,2) 说明 0号轴和1号轴的顺序变了, 那么,坐标的顺序也应该变了, 例如 元素 8: 开始时:根据轴顺序 0,1,2.他的坐标是 (1,0,0) 现在,根据周顺序 1,0,2:他的坐标是(0,1,0). sw

  • Numpy数组转置的实现

    目录 数组转置 arr.T 轴变换 arr.transpose() 二维数组转置 高维数组转置 轴变换 arr.swapaxes() numpy数组转置可以通过arr.T.arr.transpose().arr.swapaxes()实现. 数组转置 arr.T 轴变换 arr.transpose() ndarray.transpose()主要作用通过置换数组轴,来实现对数组的转置. 二维数组转置 若不在transpose中声明轴,默认是矩阵转置效果同 arr.T 高维数组转置 高维数组的转置,比

  • Python中numpy数组的计算与转置详解

    目录 前言 1.numpy数组与数的运算 2.numpy相同尺寸的数组运算 3.numpy不同尺寸的数组计算 4.numpy数组的转置 总结: 前言 本文主要讲述numpy数组的计算与转置,讲相同尺寸数组的运算与不同尺寸数组的运算,同时介绍数组转置的三种方法. numpy数组的操作比较枯燥,但是都很实用,在很多机器学习.深度学习算法中都会使用到,对numpy数组的一些操作. 1.numpy数组与数的运算 主要包括数组与数的加减乘除运算,废话不多说,看代码: import numpy as np

  • Python中的numpy数组模块

    目录 一.numpy简介 1.numpy库作用: 2.NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含: 3.NumPy 应用 二.为什么用numpy 三.创建numpy数组 1.将列表转换创建numpy数组,可选择显式指定dtype 2.arange方式创建numpy数组 3.其他方式创建numpy数组 4.numpy或pandas中reshape()重塑形状(行列转换)的用法 4.numpy.random生成随机数 5. fromstring/fromfunction(了解)

  • ndarray数组的转置(transpose)和轴对换方式

    目录 ndarray数组的转置(transpose)和轴对换 1 .T 2. transpose 3.swapaxes ndarray数据基本操作 数组与标量的运算 数组与数组的运算 数组的索引与切片 ndarray-布尔类型索引 ndarray-花式索引:指的是利用整数数组进行索引的方式. ndarray-数组转置与轴对换 ndarray-通用函数/常用函数 一元函数 二元函数 ndarray-聚合函数 np.where函数 np.unique函数 总结 ndarray数组的转置(transp

  • 详解Numpy数组转置的三种方法T、transpose、swapaxes

    Numpy是高性能科学计算和数据分析的基础包,里面包含了许多对数组进行快速运算的标准数学函数,掌握这些方法,能摆脱数据处理时的循环. 1.首先数组转置(T) 创建二维数组data如下: 进行矩阵运算时,经常要用数组转置,比如计算矩阵内积X^T X.这时就需要利用数组转置,如下: 2.轴对换之transpose 对于高维数组,可以使用轴对换来对多个维度进行变换. 这里创建了一个三维数组,各维度大小分别为2,3,4. transpose进行的操作其实是将各个维度重置,原来(2,3,4)对应的是(0,

  • numpy.transpose对三维数组的转置方法

    如下所示: import numpy as np 三维数组 arr1 = np.arange(16).reshape((2, 2, 4)) #[[[ 0 1 2 3] # [ 4 5 6 7]] # [[ 8 9 10 11] # [12 13 14 15]]] arr2=arr1.transpose((1,0,2)) #[[[ 0 1 2 3] # [ 8 9 10 11]] # # [[ 4 5 6 7] # [12 13 14 15]]] 正序为(0,1,2),数组为 #[[[ 0 1 2

  • numpy.transpose()实现数组的转置例子

    说到转置操作,顺便提及矩阵与数组的区别: 矩阵:数学里的概念,其元素只能是数值,这也是区别于数组的根本所在 数组:计算机中的概念,代表一种数据组织.存储方式,其元素可以是数字.也可以是字符 数组的转置操作,是借鉴了线性代数中矩阵的转置操作.将行与列对调,即第一行变成第一列-..或第一列变成第一行-..的操作即使转置操作. 1. 多维数组的转置 import numpy as np test = np.array([[12,4,7,0],[3,7,45,81]]) test # 以下为test输出

随机推荐