Saya mencoba untuk membuat fungsi transpose matriks untuk python tapi sepertinya saya tidak bisa membuatnya berfungsi. Katakan saya punya
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
dan saya ingin fungsi saya muncul
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
Jadi dengan kata lain, jika saya mencetak array 2D ini sebagai kolom dan baris saya ingin baris berubah menjadi kolom dan kolom menjadi baris.
Saya membuat ini sejauh ini tetapi tidak berhasil
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
python
list
multidimensional-array
Julio Diaz
sumber
sumber
izip
dariitertools
dapat menghemat memori untuk array besar.[['a', 'b', 'g'], ['d', 'e', 'h'], ['c', 'f', 'i']]
bukan[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
?map(list, zip(*theArray))
.zip
sudah mengembalikan iterator: docs.python.org/3.0/whatsnew/…generator daftar membuat array 2d baru dengan item daftar bukan tupel.
sumber
list(map(list, zip(*theArray)))
Jika baris Anda tidak sama, Anda juga dapat menggunakan
map
:Sunting: Di Python 3 fungsi yang
map
diubah,itertools.zip_longest
dapat digunakan sebagai gantinya:Sumber: Apa yang Baru Di Python 3.0
sumber
Jauh lebih mudah dengan numpy:
sumber
Masalah dengan kode asli Anda adalah bahwa Anda diinisialisasi
transpose[t]
pada setiap elemen, bukan hanya sekali per baris:Ini berfungsi, meskipun ada lebih banyak cara Pythonic untuk mencapai hal yang sama, termasuk
zip
aplikasi @ JF .sumber
Untuk melengkapi jawaban JF Sebastian, jika Anda memiliki daftar daftar dengan panjang yang berbeda, lihat pos hebat ini dari ActiveState . Pendeknya:
Untuk menangani daftar daftar dengan panjang berbeda, gunakan:
sumber
Jawaban "terbaik" telah dikirimkan, tetapi saya pikir saya akan menambahkan bahwa Anda dapat menggunakan pemahaman daftar bersarang, seperti yang terlihat dalam Tutorial Python .
Berikut ini cara Anda bisa mendapatkan array yang dipindahkan:
sumber
Yang ini akan mempertahankan bentuk persegi panjang, sehingga transpos selanjutnya akan mendapatkan hasil yang tepat:
sumber
Anda dapat mencoba ini dengan pemahaman daftar seperti berikut ini
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)
sumber
Jika Anda ingin mengubah urutan matriks seperti A = np.array ([[1,2], [3,4]]), maka Anda dapat menggunakan AT, tetapi untuk vektor seperti a = [1,2], aT tidak mengembalikan transpos! dan Anda perlu menggunakan a.reshape (-1, 1), seperti di bawah ini
sumber
Anda dapat melakukannya hanya dengan menggunakan pemahaman python.
sumber
sumber
sumber
sumber
sumber
sumber
`
`Fungsi ini akan mengembalikan transpose
sumber
Program Python untuk mengubah posisi matriks:
sumber