Python의 매트릭스 전치
파이썬에 대한 매트릭스 전치 함수를 만들려고 하는데 작동이 안 되는 것 같습니다.있다고 해요
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
그리고 나는 내 기능이 생각해내기를 원합니다.
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
즉, 이 2D 배열을 열과 행으로 인쇄할 경우 행이 열로 바뀌고 열이 행으로 바뀌었으면 합니다.
제가 지금까지 만든 건데 작동이 안 돼요.
def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])
for t in range(len(anArray)):
for tt in range(len(anArray[t])):
transposed[t] = [None]*len(anArray)
transposed[t][tt] = anArray[tt][t]
print transposed
파이썬 2:
>>> theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
>>> zip(*theArray)
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
파이썬 3:
>>> [*zip(*theArray)]
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
>>> theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
>>> [list(i) for i in zip(*theArray)]
[['a', 'd', 'g'], ['b', 'e', 'h'], ['c', 'f', 'i']]
목록 생성기는 튜플 대신 목록 항목으로 새 2D 배열을 만듭니다.
행이 동일하지 않은 경우 다음을 사용할 수도 있습니다.map
:
>>> uneven = [['a','b','c'],['d','e'],['g','h','i']]
>>> map(None,*uneven)
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', None, 'i')]
편집: Python 3의 기능map
변경되었다.itertools.zip_longest
대신 사용할 수 있습니다.
출처:Python 3.0의 새로운 기능
>>> import itertools
>>> uneven = [['a','b','c'],['d','e'],['g','h','i']]
>>> list(itertools.zip_longest(*uneven))
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', None, 'i')]
Numpy를 사용하면 훨씬 쉬워집니다.
>>> arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> arr.T
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> theArray = np.array([['a','b','c'],['d','e','f'],['g','h','i']])
>>> theArray
array([['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i']],
dtype='|S1')
>>> theArray.T
array([['a', 'd', 'g'],
['b', 'e', 'h'],
['c', 'f', 'i']],
dtype='|S1')
당신의 원래 코드의 문제는 당신이 초기화했다는 것입니다.transpose[t]
각 행에 한 번만 있는 것이 아니라 모든 요소에서:
def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])
for t in range(len(anArray)):
transposed[t] = [None]*len(anArray)
for tt in range(len(anArray[t])):
transposed[t][tt] = anArray[tt][t]
print transposed
비록 @J.F.를 포함하여 같은 일을 하는 더 많은 파이썬적인 방법들이 있지만, 이것은 효과가 있습니다.zip
어플.
J.F.를 완성합니다.Sebastian의 답변, 길이가 다른 목록이 있다면 ActiveState의 이 훌륭한 게시물을 확인하십시오.간단히 말해서:
기본 제공 함수 zip은 유사한 작업을 수행하지만 결과를 가장 짧은 목록의 길이로 잘라내기 때문에 원래 데이터의 일부 요소가 나중에 손실될 수 있습니다.
길이가 다른 목록을 처리하려면 다음을 사용합니다.
def transposed(lists):
if not lists: return []
return map(lambda *row: list(row), *lists)
def transposed2(lists, defval=0):
if not lists: return []
return map(lambda *row: [elem or defval for elem in row], *lists)
"최상의" 답변은 이미 제출되었지만, 파이썬 튜토리얼에서 보는 것처럼 중첩된 목록 이해를 사용할 수 있다는 것을 추가하고 싶습니다.
다음은 전치 배열을 얻을 수 있는 방법입니다.
def matrixTranspose( matrix ):
if not matrix: return []
return [ [ row[ i ] for row in matrix ] for i in range( len( matrix[ 0 ] ) ) ]
이것은 직사각형 모양을 유지하여 후속 전치가 올바른 결과를 얻을 수 있도록 합니다.
import itertools
def transpose(list_of_lists):
return list(itertools.izip_longest(*list_of_lists,fillvalue=' '))
당신은 다음과 같은 목록 이해력으로 이것을 시도할 수 있습니다.
matrix = [['a','b','c'],['d','e','f'],['g','h','i']] n = len(matrix) transpose = [[row[i] for row in matrix] for i in range(n)] print (transpose)
A = np.array([1,2], [3,4])와 같은 행렬을 전치하려면 A를 사용하면 됩니다.T, 그러나 a = [1,2]와 같은 벡터의 경우 a.T는 전치환을 반환하지 않으며 아래와 같이 .reshape(-1, 1)를 사용해야 합니다.
import numpy as np
a = np.array([1,2])
print('a.T not transposing Python!\n','a = ',a,'\n','a.T = ', a.T)
print('Transpose of vector a is: \n',a.reshape(-1, 1))
A = np.array([[1,2],[3,4]])
print('Transpose of matrix A is: \n',A.T)
당신은 단순히 파이썬 이해를 사용하여 그것을 할 수 있습니다.
arr = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i']
]
transpose = [[arr[y][x] for y in range(len(arr))] for x in range(len(arr[0]))]
def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])
for i in range(len(transposed)):
transposed[i] = [None]*len(transposed)
for t in range(len(anArray)):
for tt in range(len(anArray[t])):
transposed[t][tt] = anArray[tt][t]
return transposed
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
print matrixTranspose(theArray)
import numpy as np #Import Numpy
m=int(input("Enter row")) #Input Number of row
n=int(input("Enter column")) #Input number of column
a=[] #Blank Matrix
for i in range(m): #Row Input
b=[] #Blank List
for j in range(n):#column Input
j=int(input("Enter Number in Pocket ["+str(i)+"]["+str(j)+"]")) #sow Row Column Number
b.append(j) #addVlaue to list
a.append(b)#Add List To Matrix
a=np.array(a)#convert 1matrix as Numpy
b=a.transpose()#transpose Using Numpy
print(a) #Print Matrix
print(b)#print Transpose Matrix
#generate matrix
matrix=[]
m=input('enter number of rows, m = ')
n=input('enter number of columns, n = ')
for i in range(m):
matrix.append([])
for j in range(n):
elem=input('enter element: ')
matrix[i].append(elem)
#print matrix
for i in range(m):
for j in range(n):
print matrix[i][j],
print '\n'
#generate transpose
transpose=[]
for j in range(n):
transpose.append([])
for i in range (m):
ent=matrix[i][j]
transpose[j].append(ent)
#print transpose
for i in range (n):
for j in range (m):
print transpose[i][j],
print '\n'
a=[]
def showmatrix (a,m,n):
for i in range (m):
for j in range (n):
k=int(input("enter the number")
a.append(k)
print (a[i][j]),
print('\t')
def showtranspose(a,m,n):
for j in range(n):
for i in range(m):
print(a[i][j]),
print('\t')
a=((89,45,50),(130,120,40),(69,79,57),(78,4,8))
print("given matrix of order 4x3 is :")
showmatrix(a,4,3)
print("Transpose matrix is:")
showtranspose(a,4,3)
def transpose(matrix):
x=0
trans=[]
b=len(matrix[0])
while b!=0:
trans.append([])
b-=1
for list in matrix:
for element in list:
trans[x].append(element)
x+=1
x=0
return trans
def transpose(matrix):
listOfLists = []
for row in range(len(matrix[0])):
colList = []
for col in range(len(matrix)):
colList.append(matrix[col][row])
listOfLists.append(colList)
return listOfLists
`
def transpose(m):
return(list(map(list,list(zip(*m)))))
"이 함수는 전치환을 반환합니다.
매트릭스를 전치하는 파이썬 프로그램:
row,col = map(int,input().split())
matrix = list()
for i in range(row):
r = list(map(int,input().split()))
matrix.append(r)
trans = [[0 for y in range(row)]for x in range(col)]
for i in range(len(matrix[0])):
for j in range(len(matrix)):
trans[i][j] = matrix[j][i]
for i in range(len(trans)):
for j in range(len(trans[0])):
print(trans[i][j],end=' ')
print(' ')
언급URL : https://stackoverflow.com/questions/4937491/matrix-transpose-in-python
'programing' 카테고리의 다른 글
Linux에서 자동으로 명령 반복 (0) | 2023.05.27 |
---|---|
실행 시 "내비게이션 바"에 대한 경고 프레임이 Xcode 8 Swift 3에 나타납니다. (0) | 2023.05.27 |
Python을 사용하여 Lovoo API 액세스 (0) | 2023.05.27 |
Xcode 10은 com.apple.commcenter.core telephony를 손상시키는 것 같습니다.xpc (0) | 2023.05.27 |
음수 정수를 0으로 설정할 .NET Math 메서드를 찾고 있습니다. (0) | 2023.05.22 |