【问题标题】:Transpose of a matrix in pythonpython中矩阵的转置
【发布时间】:2021-09-17 06:00:17
【问题描述】:

如何修改它以输入具有任何维度的矩阵,如何在不输入 n 的情况下更改 n?

开发一个程序来输入一个任意维度的矩阵并输出该矩阵的转置。当输入 -1 作为输入时,您应该停止接受行。使用 2D(二维)列表来存储矩阵。您应该处理异常,例如检查元素数量不一致的无效行。

注意:打印“无效矩阵”作为元素数量不一致的无效行的错误消息。为您正在处理的任何其他异常打印“错误”。

尝试:

lst=[]
n=4
for i in range(n) :
    
    inp=input()
    
    if inp==-1:
        break
    marks=inp.split()

    mark_list = list(map(int,marks))

    lst.append(mark_list)
    
    
for j in range(len(lst[0])):
    for k in range(len(lst)):
        print(lst[k][j],end=" ")
    print("\n",end="")    

除了 EOFError : 经过 除了索引错误: print("无效矩阵")

【问题讨论】:

  • 您将其限制为 4 行。只需将 'n = 4' 和 for i in range(n) : 替换为 while True:。另外,请注意,您没有按要求检查不连贯的输入(例如,第一行有 4 个元素,第二行有 3 个或 5 个)
  • 输入以行的形式给出,所以你只需要将第一个输入行的长度设为 n

标签: python exception matrix


【解决方案1】:
list(zip(*lst))

这一行转置整个矩阵

【讨论】:

  • 谢谢。但我只想知道如何修改此代码块以用于任何维度的矩阵
  • 这适用于任何尺寸
  • 不,它不适用于任何维度。我已经赞成你的回答,因为这个想法很棒。
【解决方案2】:

如果要转置任意维度的矩阵,请使用numpy

# Python env: pip install numpy
# Miniconda env: conda install numpy
# Anaconda env: already installed

import numpy as np

lst = [[[11, 12], [13, 14], [15, 16]], [[21, 22], [23, 24], [25, 26]]]

m = np.array(lst)
M = m.T

输出:

>>> m
array([[[11, 12],
        [13, 14],
        [15, 16]],

       [[21, 22],
        [23, 24],
        [25, 26]]])


>>> M
array([[[11, 21],
        [13, 23],
        [15, 25]],

       [[12, 22],
        [14, 24],
        [16, 26]]])

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2023-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多