精华内容
下载资源
问答
  • 1.首先数组转置(T)创建二维数组data如下:进行矩阵运算时,经常要用数组转置,比如计算矩阵内积X^T X.这时就需要利用数组转置,如下:2.轴对换之transpose对于高维数组,可以使用轴对换来对多个维度进行变换。这里...

    Numpy是高性能科学计算和数据分析的基础包,里面包含了许多对数组进行快速运算的标准数学函数,掌握这些方法,能摆脱数据处理时的循环。

    1.首先数组转置(T)

    创建二维数组data如下:

    2019052715101229.png

    进行矩阵运算时,经常要用数组转置,比如计算矩阵内积X^T X.这时就需要利用数组转置,如下:

    2019052715101230.png

    2.轴对换之transpose

    对于高维数组,可以使用轴对换来对多个维度进行变换。

    2019052715101331.png

    这里创建了一个三维数组,各维度大小分别为2,3,4。

    2019052715101332.png

    transpose进行的操作其实是将各个维度重置,原来(2,3,4)对应的是(0,1,2)。使用transpose(1,0,2)后,各个维度大小变为(3,2,4),其实就是将第一维和第二维互换。

    对于这个三维数组,转置T其实就等价于transpose(2,1,0),如下:

    2019052715101333.png

    3.两轴对换swapaxes:swapaxes方法接受的参数是一对轴编号,使用transpose方法是对整个轴进行对换,而swapaxes是将参数的两个轴进行对换。刚刚上面的transpose(1,0,2),实际上就是将0和1轴进行对换,因此使用swapaxes也可以实现,如下:

    2019052715101334.png

    上面就是Numpy包里面进行数组转置和轴对换最常用的方法。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: 详解Numpy数组转置的三种方法T、transpose、swapaxes

    本文地址: http://www.cppcns.com/jiaoben/python/260835.html

    展开全文
  • 本文始发于个人公众号:TechFlow,原创不易,求个关注今天这篇是numpy专题的第四篇文章,numpy中的数组重塑与三元表达式。首先我们来看数组重塑,所谓的重塑本质上就是改变数组的shape。在保证数组当中所有元素不变...

    本文始发于个人公众号:TechFlow,原创不易,求个关注

    今天这篇是numpy专题的第四篇文章,numpy中的数组重塑与三元表达式。

    首先我们来看数组重塑,所谓的重塑本质上就是改变数组的shape。在保证数组当中所有元素不变的前提下,变更数组形状的操作。比如常用的操作主要有两个,一个是转置,另外一个是reshape。

    转置与reshape

    转置操作很简单,它对应线性代数当中的转置矩阵这个概念,也就是说它的功能就是将一个矩阵进行转置。

    转置矩阵的定义是将一个矩阵的横行写为转置矩阵的纵列,把纵列写成转置矩阵的横行。这个定义的是二维的矩阵,本质上来说,转置操作其实是将一个矩阵沿着矩阵的大对角线进行翻转。翻转之后,显然这个矩阵的各个维度都会发生变化。

    其中二维的矩阵最直观,一个4 x 3的矩阵,转置之后得到的是3 x 4的矩阵。如果维度更多呢?如果是3 x 2 x 4的矩阵转置之后会得到什么?

    很简单,得到的会是4 x 2 x 3的矩阵。我们都知道,如果我们把一个矩阵各个维度的大小写在一起,会得到一个元组(tuple),这个元组称为矩阵的shape,我实在是不知道该怎么翻译这个单词,但是我觉得叫做形状不太妥当,所以就保留了英文原文。转置之后,矩阵的shape会整个翻转。比如(3, 2, 4)会变成(4, 2, 3)。

    我们可以来看一个例子,会更加的直观。首先我们先看最简单的二维矩阵:

    这是随机出来的一个3 x 4的二维矩阵,在numpy当中,有两种方式获取一个矩阵或者是数组的转置。第一种方式是通过在数组的变量名之后加上.T操作符,第二种方式是调用numpy中的transpose函数,这两种方式是一样的。我个人比较倾向于前者,写起来比较简单。

    我们可以看到转置之后新的矩阵的第一列其实是原矩阵的第一行,第一行是原矩阵的第一列。可以看成是原矩阵按照从左上角到右下角的一条无形的线翻转之后的结果。

    理解了转置之后,我们再来看reshape操作。其实我们从这个单词上也能大概猜到它的意思,reshape也就是再次shape的意思,本意是根据我们想要的shape重新组装矩阵当中的元素。

    我们来看一个例子吧,首先,我们通过arange方法来获取一个一维的数组:

    因为是1维的,所以我们去看它的shape也只有一维。假设我们不喜欢这样的一维数组,而想把它变成3 x 4或者是6 x 2的格式,这时候使用reshape就会很方便。

    本质上来说reshape操作其实就是按照顺序从矩阵当中获取元素,然后按照我们制定的shape填充出一个新的矩阵的操作。这个应该不难理解, 它也是非常常用的重塑操作,通过reshape和转置,我们可以很方便地操作矩阵的大小,根据我们的需要作出改变。

    三元表达式

    在许多编程语言当中我们经常会用到三元表达式,三元表达式其实本质就是if-else语句,只是我们用特殊的方法将它简写。

    比如说在C++当中,我们可以把if condition A else B简写成:condition ? A : B。Python同样支持三元表达式,不过对C++的三元表达式做了一些改动,在Python当中三元表达式写成:A if condition else B。相对来说更加直观一些,我们经常会在数组初始化的时候用到三元表达式。

    比如,我们可能会这样生成一个数组:

    arr = [1 if condition else 0 for _ in range(10)]

    我们通过条件来判断了每一位是1还是0来生成了一个数组,简化了代码。在numpy当中同样继承了这个用法,我们一样可以使用三元表达式,不过numpy将它封装进了where函数当中,我们是通过调用一个方法来实现三元表达式的功能。我们来看下具体的用法,假设我们有两个数组:

    我们还有一个bool型的数组c,我们希望根据c数组选择从a数组或者是b数组当中获取数据。我们可以使用where写成这样:

    在这个例子当中,c数组中的1和0分别表示True和False。当我们调用np.where的时候,numpy会自动根据c数组当中的值去选择从a数组还是b数组当中获取数据。相当于我们执行了这么一段代码:

    [x if c else y for c, x, y in zip(c, a, b)]

    虽然两者的运行结果是一样的,但是显然使用循环的方法计算耗时更长,而使用numpy的向量做法运算速度更快。除此之外,numpy的where方法还支持高维的数组,但是循环的方法不行。并且where还有一些更高级的用法,比如说我们传入的第二个和第三个参数,可以不是数组而是一个标量。比如我们可以指定当c中的元素是True的时候填入1,否则填入-1:

    甚至我们还可以将标量和向量结合起来使用:

    并且这里的数组c也可以替换成逻辑运算:

    总结

    今天的文章主要介绍了Numpy当中的reshape、转置以及where的用法,这些也是numpy的基础用法,尤其是转置、reshape,几乎是处理数据必用的方法。所以想要从事Python机器学习或者是人工智能的小伙伴,numpy的这些用法是一定要会的。

    本文当中介绍的只是numpy的一些固定套路,但其实numpy很多的用法是可以组合的,一些看似平淡无奇的用法组合在一起之后会有神奇的效果。这一点光看书或者是资料是很难穷尽的,所以如果你已经学会了这些api的基本使用,接下来最应该做的是去读一些大牛的源码,看看大牛们是如何运用这些工具的,相信一定还会有新的收货。

    文章就到这里,如果喜欢本文,可以的话,请点个关注。

    展开全文
  • Python输入二维数组方法前不久对于Python输入二维数组有些不解,今日成功尝试,记以备忘。这里以输入1-9,3*3矩阵为例n=int(input())line=[[0]*n]*nfor i in range(n):line[i]=input().split(' ')print(line)使用数据...

    Python输入二维数组方法

    前不久对于Python输入二维数组有些不解,今日成功尝试,记以备忘。这里以输入1-9,3*3矩阵为例

    n=int(input())

    line=[[0]*n]*n

    for i in range(n):

    line[i]=input().split(' ')

    print(line)

    使用数据转换为int即可!

    以上这篇Python输入二维数组方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    您可能感兴趣的文章:

    一些Python中的二维数组的操作方法

    python中字符串变二维数组的实例讲解

    基于python 二维数组及画图的实例详解

    Python实现二维数组输出为图片

    时间: 2018-04-12

    需要在程序中使用二维数组,网上找到一种这样的用法: #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0]] myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] 为什么...一时搞不懂,后面翻阅The Python Standard Library 找到答案 list * n->n sha

    1.二维数组取值 注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型 #二维数组 import numpy as np list1=[[1.73,1.68,1.71,1.89,1.78], [54.4,59.2,63.6,88.4,68.7]] list3=[1.73,1.68,1.71,1.89,1.78] list4=[54.4,59.2,63.6,88.4,68.7] list5=np.array([1.73,1.68,1.71,1.89,1.78])

    对于二维数组,img_mask [[ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7 7 7] ..., [266 266 266 ..., 253 253 253] [266 266 266 ..., 253 253 253] [266 266 266 ..., 253 253 253]] 显示为图片的代码为: import matplotlib.pyplot as pyplot pyplot.imshow(im_mask) 以上这篇P

    有一道算法题题目的意思是在二维数组里找到一个峰值.要求复杂度为n. 解题思路是找田字(四边和中间横竖两行)中最大值,用分治法递归下一个象限的田字. 在用python定义一个二维数组时可以有list和numpy.array两种方式,看了几篇python中二维数组的建立的博客发现大多都是建立的初始化的二维数组,而我需要通过文件读取得到的是字符串,再把字符串转换为二维数组,找不到解决方法还是决定自己来转换. 首先,最开始的字符串输出如下,数字之间有空格 思路就是把先按换行符进行切片,再对每一行的字符再

    关于python中的二维数组,主要有list和numpy.array两种. 好吧,其实还有matrices,但它必须是2维的,而numpy arrays (ndarrays) 可以是多维的. 我们主要讨论list和numpy.array的区别: 我们可以通过以下的代码看出二者的区别 >>import numpy as np >>a=[[1,2,3],[4,5,6],[7,8,9]] >>a [[1,2,3],[4,5,6],[7,8,9]] >>type(a

    L3Byb3h5L2h0dHAvZmlsZXMuamI1MS5uZXQvZmlsZV9pbWFnZXMvYXJ0aWNsZS8yMDE4MTAvMjAxODEwMTcxNDMxNTk5MjMucG5nJiMwNjM7MjAxODkxNzE0MzIxMg==.jpg

    二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩阵称为方阵.对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素. Python中创建二维数组 Python中的列表list可以当做一维数组使用,但是没有直接的定义使用二维数组.如果直接使用a = [][]会产生SyntaxError: invalid syntax语法不正确错误. 一般Python中创建二

    1.实测,这个版本在32位window7和python3.2环境下正常使用. 2.使用方法:把解压后所得的chardet和docs两个文件夹拷贝到python3.2目录下的Lib\site-packages目录下就可以正常使用了. 3.判断文件编码的参考代码如下: file = open(fileName, "rb")#要有"rb",如果没有这个的话,默认使用gbk读文件. buf = file.read() result = chardet.detect(buf)

    如何根据二维数组中的某一行或者某一列排序?假设data是一个numpy.array类型的二维数组,可以利用numpy中的argsort函数进行实现,代码实例如下: data = data[data[:,2].argsort()] #按照第3列对行排序 注意:argsort返回的只是排好序后的行索引,不会改变原数组. 按照某行进行排序,可以利用转置操作,代码如下所示: data = data.T(data.T[:,2].argsort()).T # 按照第3行对列进行排序 也可以直接按行进行排序,

    1. 使用输入值初始化列表 nums = [] rows = eval(input("请输入行数:")) columns = eval(input("请输入列数:")) for row in range(rows): nums.append([]) for column in range(columns): num = eval(input("请输入数字:")) nums[row].append(num) print(nums) 输出结果为: 请

    以三维数组为例 先申请1个一维数组空间: mat = [None]*d1 d1是第一维的长度. 再把mat中每个元素扩展为第二维的长度: for i in range(len(mat)): mat[i][j] = [None]*d2 类似的,把mat中每个元素扩展为第三维的大小: for i in range(len(mat)): for j in range(len(mat[0]): mat[i][j] = [None]*d3 以上是创建的"数组"其实是list类,不是严格意义的数组

    如下所示:

    <?php //定义二维索引数组 $arr = array( array("101","李军","男","1976-02-20","95033"), array("103","陆君","男","1974-06-03","95031"), array("10

    python中字符串数组如何逆序排列?下面给大家介绍几种方法: 1.数组倒序: 原始元素的倒序排列 (1)切片 >>> arr = [1,2,3,4,3,4]>>> print (arr[::-1])[4, 3, 4, 3, 2, 1] (2)reverse() >>> arr = [1,2,3,4,3,4]>>> arr.reverse()>>> print (arr)[4, 3, 4, 3, 2, 1] (3)r

    展开全文
  • 转置: In [1]: arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ...: ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] ...: In [2]: tuples = list(zip(*array...
    转置:
    
    In [1]: arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
       ...:           ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
       ...: 
    
    In [2]: tuples = list(zip(*arrays))
    
    In [3]: tuples
    Out[3]: 
    [('bar', 'one'),
     ('bar', 'two'),
     ('baz', 'one'),
     ('baz', 'two'),
     ('foo', 'one'),
     ('foo', 'two'),
     ('qux', 'one'),
     ('qux', 'two')]

    http://pandas.pydata.org/pandas-docs/stable/advanced.html#creating-a-multiindex-hierarchical-index-object

    http://www.runoob.com/python/python-func-zip.html

    展开全文
  • 【转】python 中二维数组转置

    千次阅读 2020-03-13 00:11:23
    python 中二维数组转置 如果zip(*array)不经过x,y,z=zip(*array);拆分成x,y,z三个变量,那么[[1,4,7],[2,5,8],[3,6,9]];被zip(*array)之后的结果恰好是[(1, 2, 3), (4, 5, 6), (7, 8, 9)],刚好形成一个转置的...
  • numpy一维数组转置

    千次阅读 2020-03-22 16:01:29
    维数组转置 numpy中默认的一维数组形式可能是 x = np.array([1,2,3,4]) 此时对此数组进行转置操作 x.T 没用用,因为转置操作只能用在二维数组上。要对其变为列向量,采用以下操作 x = np.array([x]) 此时变为...
  • printf("已转置数组\n"); //打印 printAll(array); system("pause"); return 0; } void inputData(int array[][COL]){ int x,y; for(y=0;y;y++){ for(x=0;x;x++){ printf("请输入第%d行第%d列数据:...
  • [Python3]Numpy数组转置的三种方法T、transpose、swapaxes

    万次阅读 多人点赞 2019-06-05 20:14:50
    天下难事,必作于易;...创建二维数组data如下: 进行矩阵运算时,经常要用数组转置,比如计算矩阵内积X^T X.这时就需要利用数组转置,如下: 2.轴对换之transpose 对于高维数组,可以使用轴对换来对多...
  • 我想定义一个没有初始化长度的二维数组,如下所示: matrix = 但它不起作用..... 我已经尝试了下面的代码,但它也是错误的: matrix = 错误: traceback ... indexerror: list index out of range 我哪里有问题?......
  • 最近在学python的数据分析...声明:作者用的是python2.7转置是重塑的一种特殊形式,他返回的是源数据的视图(不会进行任何复制操作,这一点要和花式索引不太一样,后者总是将数据复制到新数组中)。 完成转置可以通过
  • python二维数组上的一些操作

    千次阅读 2016-08-16 09:30:28
    # -*- coding: utf-8 -*- ...#读取文件内容,生成二维数组  def generate_list2array(filepath):  f = open(filepath,'r')  i = 1  t = f.readlines()  total_rows = len(t)  f.close()    f = ope
  • Numpy下三维数组转置

    千次阅读 2019-05-25 14:35:09
    高维矩阵转置,可能在matlab和python的mat文件交互上出现分歧,两方的顺序并不一样,需要注意,可以转置使用。 原博客:https://blog.csdn.net/u013796132/article/details/70207945 numpy中的ndarray很适合数组...
  • 文章目录一.转置1.使用 array.T:2.使用array.transpose()方法....数组转置 1.使用 array.T: 1.对于array对象,若是一维数组(行向量),array.T并不会把行向量转化成列向量,见下: import numpy as...
  • 二维 List列表转换(转置) 方法一 zip() def test(): a = [[1, 2, 3], [4, 5, 6]] b = tuple(zip(*a)) c = list(zip(*a)) d = list(map(list, zip(*a))) print(b) # ((1, 4), (2, 5), (3, 6)) ...
  •   最近学习numpy,总是出错在一维数组转置问题上,下面给出一个例子感受一下这个问题。   可以看到上述的d和p完全相同,并没有想象中将1x4的数组转化为4x1的数组。     下面给出解决方案。 方法一   ...
  • 二维数组拆分为三维数组 目标:把一个m∗nm*nm∗n的数组,每x行为一页(x可被m整除),拆分为一个m行n列x页的三维数组 代码 import numpy as np a = np.arange(30) a.resize(6,5) a array([[ 0, 1, 2, 3, 4], [ 5...
  • Python实现二维数组输出为图片 对于二维数组,img_mask[[ 0 0 0 ..., 7 7 7][ 0 0 0 ..., 7 7 7][ 0 0 0 ..., 7 7 7]...,[266 266 266 ..., 253 253 253][266 266 266 ..., 253 253 253][266 266 266 ..., 253 253 ...
  • 1.使用numpy包里面的transpose()可以快速将一个二维数组转置 2.使用.T属性快速转置 3.使用swapaxes(1, 0)方法 t5 = np.arange(12).reshape(3, 4) print(t5) print("*"*20) # 将t5矩阵进行转置 t6 = t5....
  • python、matlab高维数组转置

    千次阅读 2018-12-17 14:38:19
    转置(transpose)和轴对换 转置可以对数组进行重置,返回的是源数据的视图...1 .T,适用于一、二维数组 In [1]: import numpy as np In [2]: arr = np.arange(20).reshape(4,5)#生成一个4行5列的数组 In [3]: arr O...
  • Python 二维列表/数组 行列转置

    千次阅读 2019-05-22 19:22:52
    # 转置二维数组 a = [[1, 2, 3], [4, 5, 6]] b = [] for i in range(3): b.append([0]*2) print(b) for i in range(len(b)): for j in range(len(b[i])): b[i][j] = a[j][i] print(b) 2. # 转置二维数组 a.....
  • python 二维列表转置 def transpose(self, matrix): new_matrix = [] for i in range(len(matrix[0])): matrix1 = [] for j in range(len(matrix)): matrix1.append(matrix[j][i]) new_matrix.append(matrix1...
  • 一、总结 输入用了 int(input()) ,但发现这种方法好像有点不方便 每次输入一个数字都要按回车,按...Python中创建二维数组的方法(以本案例为例): matrixA=[[0 for i in range(4)] for i in range(3)] matr...
  • python中的矩阵和数组之间的运算 一、当矩阵为方阵(p×p) a=np.matrix(np.array([[1,2],[3,4]])) print(a.shape) a 输出: (2, 2) matrix([[1, 2], [3, 4]]) #使用dot b=np.array([1,2]) print(b.shape) b ...
  • 1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换Time Limit:1 SecMemory Limit:128 MBSubmit:154Solved:112[Submit][Status][Web Board]Description写一个函数,使给定的一个二维数组(3×3)转置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,750
精华内容 3,500
关键字:

python二维数组转置

python 订阅