Hướng dẫn how do you transpose a matrix in a for loop in python? - làm thế nào để bạn chuyển đổi một ma trận trong một vòng lặp for trong python?

Cho ma trận

matrix = [[2, None],
       [2, None]]

Tôi cần tính toán chuyển đổi của điều này. Tôi đã làm như sau:

def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result

Nhưng điều này cho tôi kết quả sai:

[[2, None],
[None, None]]

trong khi nó nên

[[2, 2],
[None, None]]

Ai đó có thể cho tôi biết nơi tôi đã sai với mã của mình không?

Hỏi ngày 5 tháng 12 năm 2015 lúc 12:12Dec 5, 2015 at 12:12

Hướng dẫn how do you transpose a matrix in a for loop in python? - làm thế nào để bạn chuyển đổi một ma trận trong một vòng lặp for trong python?

1

Bạn tham khảo cùng một ma trận, hãy thử khởi tạo một cái mới:

def transpose(matrix):
    # Makes a copy of the matrix
    result = [[None]* len(x) for x in matrix]
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[i][j] = matrix[j][i]

    return result

Bạn cũng có thể làm điều đó cho một ma trận chung bằng cách sử dụng danh sách hiểu

def transpose(matrix):
    return [[matrix[i][j] for i in range(len(matrix[j]))] for j in range(len(matrix))]

Đã trả lời ngày 5 tháng 12 năm 2015 lúc 12:28Dec 5, 2015 at 12:28

NetwavenetwaveNetwave

37.8K6 Huy hiệu vàng45 Huy hiệu bạc81 Huy hiệu đồng6 gold badges45 silver badges81 bronze badges

Vấn đề là biến

def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
4 đề cập đến
def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
5, nghĩa là bạn không tạo một bản sao, vì vậy trong vòng lặp, bạn thực sự cũng thay đổi
def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
5. Bạn có thể giải quyết điều này bằng cách tạo một bản sao của
def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
5 kết quả với
def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
8:

result = [list(x) for x in matrix]

Xem câu hỏi: Làm thế nào để nhân bản hoặc sao chép một danh sách?


Lưu ý rằng một cách dễ dàng hơn là sử dụng

def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
9:

import numpy as np
matrix = np.matrix([[2, None],[2, None]])

Sau đó sử dụng

[[2, None],
[None, None]]
0 để chuyển đổi:

matrix([[2, 2],
        [None, None]], dtype=object)

Đã trả lời ngày 5 tháng 12 năm 2015 lúc 12:27Dec 5, 2015 at 12:27

Hướng dẫn how do you transpose a matrix in a for loop in python? - làm thế nào để bạn chuyển đổi một ma trận trong một vòng lặp for trong python?

Agoldagoldagold

5.9809 Huy hiệu vàng41 Huy hiệu bạc54 Huy hiệu đồng9 gold badges41 silver badges54 bronze badges

# We can use the below method also:
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
mat_trans = []
trans = []
trans1 = []
trans2 = []
trans3 = []
for row in matrix:
    for i in range(4):
        if i == 0:
            trans.append(row[i])
        if i == 1:
            trans1.append(row[i])
        if i == 2:
            trans2.append(row[i])
        if i == 3:
            trans3.append(row[i])
mat_trans.append(trans)
mat_trans.append(trans1)
mat_trans.append(trans2)
mat_trans.append(trans3)
trans = []
print(mat_trans)

Đã trả lời ngày 26 tháng 12 năm 2019 lúc 5:10Dec 26, 2019 at 5:10

Giả sử rằng ma trận là hình chữ nhật (nghĩa là cùng kích thước danh sách trong tất cả các mảng một chiều), người ta có thể chỉ cần viết một chuyển đổi như sau.

def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
0

Lưu ý: Đây không phải là triển khai hiệu quả nhất.

Đã trả lời ngày 6 tháng 5 năm 2018 lúc 3:42May 6, 2018 at 3:42

Hướng dẫn how do you transpose a matrix in a for loop in python? - làm thế nào để bạn chuyển đổi một ma trận trong một vòng lặp for trong python?

Trong ví dụ này, bạn sẽ học cách chuyển một ma trận (được tạo bằng cách sử dụng danh sách lồng nhau).

Để hiểu ví dụ này, bạn nên có kiến ​​thức về các chủ đề lập trình Python sau:

  • Python cho vòng lặp
  • Danh sách Python

Trong Python, chúng ta có thể triển khai ma trận dưới dạng danh sách lồng nhau (danh sách bên trong danh sách). Chúng ta có thể coi từng phần tử như một hàng của ma trận.

Ví dụ

[[2, None],
[None, None]]
1 sẽ đại diện cho ma trận 3x2. Hàng đầu tiên có thể được chọn là
[[2, None],
[None, None]]
2. Và, phần tử trong cột đầu tiên có thể được chọn là
[[2, None],
[None, None]]
3.

Chuyển đổi của một ma trận là sự trao đổi của các hàng và cột. Nó được ký hiệu là x '. Phần tử ở cột Ith và cột thứ j trong x sẽ được đặt ở hàng thứ j và cột ith trong x '. Vì vậy, nếu x là ma trận 3x2, x 'sẽ là ma trận 2x3.

Dưới đây là một vài cách để thực hiện điều này trong Python.


Ma trận chuyển vị bằng cách sử dụng vòng lặp lồng nhau

def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
1

Đầu ra

def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
2

Trong chương trình này, chúng tôi đã sử dụng các vòng lặp

[[2, None],
[None, None]]
4 lồng nhau để lặp qua mỗi hàng và mỗi cột. Tại mỗi điểm, chúng ta đặt phần tử x [i] [j] vào kết quả [j] [i].


Ma trận chuyển vị bằng cách sử dụng danh sách lồng nhau

def transpose(matrix):
    # Makes a copy of the matrix
    result = matrix
    # Computes tranpose
    for i in range(2):
        for j in range(2):
            result[j][i] = matrix[i][j]

    return result
3

Đầu ra của chương trình này giống như trên. Chúng tôi đã sử dụng sự hiểu biết danh sách lồng nhau để lặp qua từng phần tử trong ma trận.