精华内容
下载资源
问答
  • Python实现矩阵转置

    万次阅读 2018-04-13 10:09:26
    这篇文章主要介绍了Python实现矩阵转置的方法,结合实例形式较为详细的分析了Python实现矩阵转置的相关操作技巧。def trans(m): a = [[] for i in m[0]] for i in m: for j in range(len(i)): a[j].append(i[j])...

    这篇文章主要介绍了Python实现矩阵转置的方法,结合实例形式较为详细的分析了Python实现矩阵转置的相关操作技巧。

    def trans(m):
      a = [[] for i in m[0]]
      for i in m:
        for j in range(len(i)):
          a[j].append(i[j])
      return a
    m = [[1, 2], [3, 4], [5, 6]]  # 想象第一个列表是原始的,后面的是往里添加的
    print trans(m)  # result:[[1, 3, 5], [ 2, 4, 6]]

    其实不动脑筋的话,用个二重循环很容易写出来:

    然而不管怎么看这种代码都很丑。

    仔细看了一下m这种结构。等等,这不是字典的iteritems()的结果么?如果dict(m),那么结果——不就是keys()和values()么?

    于是利用字典转换一下:

    def trans(m):
      d = dict(m)
      return [d.keys(), d.values()]

    可是再仔细想想,这里面有bug。如果添加列表的第一个元素相同,也就是转化之后dict的key相同,那肯定就不行了呀!况且,如果原始列表不是两个,而是多个,肯定不能用字典的呀!于是这种方法作罢,还是好好看看列表的形状。

    然后又是一个不小心的发现:

    这种转置矩阵的即时感是怎么回事?

    没错,这个问题的本质就是求解转置矩阵。

    def trans(m):
      for i in range(len(m)):
        for j in range(i):
          m[i][j], m[j][i] = m[j][i], m[i][j]
      return m
    m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print trans(m)

    其实还是有点bug的,看起来是好用的,然而这个矩阵要求行列长度相同才行。

    最后,群里某大神说:如果只是转置矩阵的话,直接zip就好了。这才想起来zip的本质就是这样的,取出列表中的对应位置的元素,组成新列表,正是这个题目要做的。

    所以最终,这个题目(转置矩阵)的python解法就相当奇妙了:

    def trans(m):
      return zip(*m)

    没错,就这么简单。python的魅力。




    展开全文
  • 主要介绍了Python实现矩阵转置的方法,结合实例形式较为详细的分析了Python实现矩阵转置的相关操作技巧,需要的朋友可以参考下
  • python实现矩阵转置

    2020-03-18 21:11:47
    matrix = [[1,2,3],[4,5,6],[7,8,9]] print(matrix) count=0 for i,row in enumerate(matrix): for j,col in enumerate(row): if i < j : temp = matrix[i][j] matrix[i]...
    matrix = [[1,2,3],[4,5,6],[7,8,9]]
    print(matrix)
    count=0
    for i,row in enumerate(matrix):
        for j,col in enumerate(row):
            if i < j :
                temp = matrix[i][j]
                matrix[i][j] = matrix[j][i]
                matrix[j][i] = temp
                count += 1
    print(matrix)
    print(count)
    
    1. 由列算
    lst = [[1,2,3],[4,5,6],[7,8,9]]
    count = 0
    for i in range(len(lst)):
        for j in range(i):   #  j<i
            lst[x][y],lst[y][x]=lst[y][x],lst[x][y]
            count += 1
    print(lst)
    print(count)
    
    1. 由行算
    lst = [[1,2,3],[4,5,6],[7,8,9]]
    for x in range(len(lst)):
        for y in range(len(lst[x])):
            if y>x:       #利用对称性
                lst[x][y],lst[y][x]=lst[y][x],lst[x][y]
    print(lst)
    

    上述代码简化一步

    lst = [[1,2,3],[4,5,6],[7,8,9]]
    for x in range(len(lst)):
        for y in range(x+1,len(lst[x])):
            lst[x][y],lst[y][x]=lst[y][x],lst[x][y]
    print(lst)
    
    展开全文
  • python实现矩阵转置的几种方法

    千次阅读 2020-09-10 22:40:47
    文章目录(1)方法一、使用numpy转置(2)方法二、使用zip()函数(3)方法三、使用python列表表达式【不占用额外空间,“原地修改”】(4)方法四、新建列表B,使用双重循环添加元素 (1)方法一、使用numpy转置 ...

    (1)方法一、使用numpy转置

    import numpy as np
    A = np.mat([[1,2,3],[4,5,6],[7,8,9]])
    print(A.T)
    print(A.swapaxes(0, 1))
    # 均输出
    # [[1 4 7]
    #  [2 5 8]
    #  [3 6 9]]
    
    import numpy as np
    A = [[1,2,3],[4,5,6],[7,8,9]]
    print(np.transpose(A))
    # 输出
    # [[1 4 7]
    #  [2 5 8]
    #  [3 6 9]]
    

    (2)方法二、使用zip()函数

    • zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
    • 可以使用 list() 转换来输出列表。【zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。】
    • 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。

    zip(A)相当于打包,打包为元组的列表

    >>> a = [1,2,3]
    >>> b = [4,5,6]
    >>> c = [4,5,6,7,8]
    >>> A = zip(a,b)     # 打包为元组的列表
    [(1, 4), (2, 5), (3, 6)]
    >>> zip(a,c)              # 元素个数与最短的列表一致
    [(1, 4), (2, 5), (3, 6)]
    >>> zip(*A)          # 与 zip 相反,*A 可理解为解压,返回二维矩阵式
    [(1, 2, 3), (4, 5, 6)]
    
    A = [[1,2,3],[4,5,6],[7,8,9]]
    print(*A) #[1, 2, 3] [4, 5, 6] [7, 8, 9]
    #zip()返回的是一个对象。如需展示列表,需手动 list() 转换。
    #print(zip(*A)) #<zip object at 0x000001CD7733A2C8>
    print(list(zip(*A)))
    # 输出
    # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    

    这里python中星号(*)的作用是将变量中可迭代对象的元素拆解出来。

    (3)方法三、使用python列表表达式【不占用额外空间,“原地修改”】

    A = [[1,2,3],[4,5,6],[7,8,9]]
    #print(len(A)) #矩阵行数
    #print(len(A[0])) #矩阵列数
    
    B = [[A[j][i] for j in range(len(A))] for i in range(len(A[0]))]
    print(B)
    # 输出
    # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
    
    B = [[A[j][i] for j in range(len(A))] for i in range(len(A[0]))]
    

    这句写的清楚一点就是:

    A = [[1,2,3],[4,5,6],[7,8,9]]
    #print(len(A)) #矩阵行数
    #print(len(A[0])) #矩阵列数
    
    for i in range(len(A[0])):#len(A[0])矩阵列数
        for j in range(len(A)):#len(A)矩阵行数
            #转置就是A[i][j]和A[j][i]互换
            A[j][i], A[i][j] = A[i][j], A[j][i]
    print(A)
    # 输出
    # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
    

    因为转置矩阵的对称性,可以更省时间的写成:

    A = [[1,2,3],[4,5,6],[7,8,9]]
    #print(len(A)) #矩阵行数
    #print(len(A[0])) #矩阵列数
    
    for i in range(len(A[0])):#len(A[0])矩阵列数
        for j in range(i,len(A)):#len(A)矩阵行数
            #转置就是A[i][j]和A[j][i]互换
            A[j][i], A[i][j] = A[i][j], A[j][i]
    print(A)
    # 输出
    # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
    

    (4)方法四、新建列表B,使用双重循环添加元素

    A = [[1,2,3],[4,5,6],[7,8,9]]
    B=[]
    for i in range(len(A[0])):#len(A[0])矩阵列数
        temp = []
        for j in range(len(A)):#len(A)矩阵行数
            temp.append(A[j][i])
        B.append(temp)
    print(B)
    # 输出
    # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
    
    展开全文
  • python实现矩阵转置

    2016-04-24 16:34:00
    所以最终,这个题目(转置矩阵)的python解法就相当奇妙了: def trans(m): return zip(*d) 没错,就这么简单。python的魅力。 转载于:https://www.cnblogs.com/anpengapple/p/5427367.html

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加。例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再添加[5, 6]扩充为[[1, 3, 5], [2, 4, 6]]等等。

    其实不动脑筋的话,用个二重循环很容易写出来:

    def trans(m):
        a = [[] for i in m[0]]
        for i in m:
            for j in range(len(i)):
                a[j].append(i[j])
        return a
    
    m = [[1, 2], [3, 4], [5, 6]]    # 想象第一个列表是原始的,后面的是往里添加的
    print trans(m)    # result:[[1, 3, 5], [ 2, 4, 6]]

    然而不管怎么看这种代码都很丑。

    仔细看了一下m这种结构。等等,这不是字典的iteritems()的结果么?如果dict(m),那么结果——不就是keys()和values()么?

    于是利用字典转换一下:

    def trans(m):
        d = dict(m)
        return [d.keys(), d.values()]

    可是再仔细想想,这里面有bug。如果添加列表的第一个元素相同,也就是转化之后dict的key相同,那肯定就不行了呀!况且,如果原始列表不是两个,而是多个,肯定不能用字典的呀!于是这种方法作罢,还是好好看看列表的形状。

    然后又是一个不小心的发现:

     

    这种转置矩阵的即时感是怎么回事?

    没错,这个问题的本质就是求解转置矩阵。于是就简单了,还是用个不动脑筋的办法:

    def trans(m):
        for i in range(len(m)):
            for j in range(i):
                m[i][j], m[j][i] = m[j][i], m[i][j]
        return m
    
    m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print trans(m)

    其实还是有点bug的,看起来是好用的,然而这个矩阵要求行列长度相同才行。

    最后,群里某大神说:如果只是转置矩阵的话,直接zip就好了。这才想起来zip的本质就是这样的,取出列表中的对应位置的元素,组成新列表,正是这个题目要做的。

    所以最终,这个题目(转置矩阵)的python解法就相当奇妙了:

    def trans(m):
        return zip(*d)

    没错,就这么简单。python的魅力。

    转载于:https://www.cnblogs.com/anpengapple/p/5427367.html

    展开全文
  • 如果矩阵为:matrix = [[1,2,3], [4,5,6], [7,8,9] ] 第一种方法,不使用额外的数组空间: for i in range(len(matrix)): for j in range(0, i): matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j] 第二...
  • 主要介绍了Python实现矩阵转置与矩阵相乘运算,结合实例形式分析了Python针对矩阵进行转置与相乘运算的相关实现技巧与操作注意事项,需要的朋友可以参考下
  • Python - 实现矩阵转置

    千次阅读 2019-08-28 13:14:36
    有个朋友提出了一个问题:手头上现在有一个二维列表,比如[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],现在要把该二维列表变成为[[1, 4, 7, 10], [2, 5, 8, 11... /usr/bin/env python3 # -*- coding:utf-8 -...
  • 这里使用python的列表推导式一行代码实现矩阵转置。 代码如下: 这里表示的是4X3的矩阵。 1 matrix = [[1,2,3], [4,5,6], [7,8,9],[10,11,12]] View Code 现在使用一行代码-列表推导式 1 [[row[i] for row in ...
  • python---实现矩阵转置

    千次阅读 2018-08-18 13:57:20
    实现矩阵转置的两种方式 1). 列表生成式 2). 内置函数zip li = [ [1,2,3,3,4], [4,5,6,2,1], [7,8,9,1,2] ] 方法一 列表生成式 li = [ [1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ] ...
  • code:对矩阵进行转置 matrix = [ [1, 2, 3, 4], [5, 6, 7, 8],[9, 10, 11, 12] ] transposed = [[row[i] for row in matrix] for i in range(4)] 列表解析先从外层开始,即 for i in range(4) i首先取0,再到内层...
  • python 矩阵转置

    2019-09-28 00:06:17
    我们通常会遇到一个问题,想要把几个不同list中的元素一一对应,然后...其实从数学角度来理解实现这个并不难,其实就是矩阵的转置问题,那么关键问题来了,我们该如何去实现矩阵转置,今天告诉大家一个好方法,借...
  • python实现矩阵共轭和共轭转置 (以IDLE上操作为例。完整代码在下方) 创建一个矩阵: >>> import numpy as np >>> e = np.mat("1 2+3j;3 4+5j") 或使用第二种方法创建矩阵(不推荐): >>>...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 176
精华内容 70
关键字:

python实现矩阵转置

python 订阅