Основная матрица транспонируется в Python - PullRequest
1 голос
/ 09 июля 2019

Я попробовал самый базовый подход для транспонирования матрицы в python. Однако я не получаю требуемых результатов. Следующий по коду:

A = [ [1, 1, 1, 1], 
    [2, 2, 2, 2], 
    [3, 3, 3, 3], 
    [4, 4, 4, 4]] 

#print (A)
def TS (A):
    B = A
    for i in (range(len(A))):
        for j in (range(len(A))):
            A[i][j] = B [j][i]
TS(A)
#print (A)

for i in range(len(A)): 
    for j in range(len(A)): 
        print(B[i][j], " ", end='') 
    print() 

Вот результат, который я получаю:

1  2  3  4  
2  2  3  4  
3  3  3  4  
4  4  4  4  

Ответы [ 5 ]

1 голос
/ 09 июля 2019

Скопируйте A в B, используя глубокую копию, тогда это должно быть B [i] [j] = A [j] [i]. Должно быть опечатка.

A = [[1, 1, 1, 1], 
    [2, 2, 2, 2], 
    [3, 3, 3, 3], 
    [4, 4, 4, 4]] 

#print (A)
def TS (A):
    from copy import deepcopy
    B = deepcopy(A)
    for i in (range(len(A))):
        for j in (range(len(A))):
            B[i][j] = A [j][i]
    return B
B = TS(A)
#print (len(A))

for i in range(len(B)): 
    for j in range(len(B)): 
        print(B[i][j], " ", end='') 
    print() 

Результат:

1  2  3  4  
1  2  3  4  
1  2  3  4  
1  2  3  4 
1 голос
/ 09 июля 2019
A = [ [1, 1, 1, 1], 
    [2, 2, 2, 2], 
    [3, 3, 3, 3], 
    [4, 4, 4, 4]]

def transpose(A,B): 

    for i in range(len(A)): 
        for j in range(len(A)): 
            B[i][j] = A[j][i]    

B = [[0 for x in range(len(A))] for y in range(len(A))]  

transpose(A, B) 

print("Result matrix is") 
for i in range(len(A)): 
    for j in range(len(A)): 
        print(B[i][j], " ", end='') 
    print() 

Выход

Матрица результата равна

1  2  3  4
1  2  3  4
1  2  3  4
1  2  3  4
1 голос
/ 09 июля 2019

Ваша проблема в два раза:

1- B - это метка на матрице A, то есть каждая модификация A, также модифицированная B
2- B был локальным для функции транспонирования и не мог быть доступен снаружи

A = [[1, 1, 1, 1], 
     [2, 2, 2, 2], 
     [3, 3, 3, 3], 
     [4, 4, 4, 4]] 

def TS (A):
    B = [row[:] for row in A]   # make a copy of A, not assigning a new label on it.
    for i in (range(len(A))):
        for j in (range(len(A))):
            B[i][j] = A[j][i]
    return B

B = TS(A)

for i in range(len(A)): 
    for j in range(len(A)): 
        print(B[i][j], " ", end='') 
    print() 

выход:

1  2  3  4  
1  2  3  4  
1  2  3  4  
1  2  3  4 
1 голос
/ 09 июля 2019

Почему бы тебе не попробовать NumPy :)

import numpy as np
z = np.transpose(np.array(A))
0 голосов
/ 09 июля 2019

B был меткой на матрице A, то есть каждая модификация A, также модифицированная B. Следовательно, неправильные значения из второй строки. Почему бы тебе не попробовать это так ...

 A = [ [1, 1, 1, 1], 
 [2, 2, 2, 2], 
 [3, 3, 3, 3], 
 [4, 4, 4, 4]] 
 def TS(A):
    for i in range(len(A)): 
        for j in range(len(A)): 
            print(A[j][i], " ", end='') 
        print()        
 TS(A)
...