Pada dasarnya yang dilakukan fungsi transpose adalah menukar bentuk dan langkah array:
>>> a = np.ones((1,2,3))
>>> a.shape
(1, 2, 3)
>>> a.T.shape
(3, 2, 1)
>>> a.strides
(48, 24, 8)
>>> a.T.strides
(8, 24, 48)
Dalam kasus array 1D numpy (rank-1 array) bentuk dan langkahnya adalah tupel 1 elemen dan tidak dapat ditukar, dan transpos array 1D seperti itu mengembalikannya tidak berubah. Sebagai gantinya, Anda dapat mengubah posisi "vektor-baris" (array bentuk numpy (1, n)
) menjadi "vektor-kolom" (array bentuk numpy (n, 1)
). Untuk mencapai ini, Anda harus terlebih dahulu mengkonversi array 1D numpy Anda menjadi vektor-baris dan kemudian menukar bentuk dan langkahnya (transpos). Di bawah ini adalah fungsi yang melakukannya:
from numpy.lib.stride_tricks import as_strided
def transpose(a):
a = np.atleast_2d(a)
return as_strided(a, shape=a.shape[::-1], strides=a.strides[::-1])
Contoh:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> transpose(a)
array([[0],
[1],
[2]])
>>> a = np.arange(1, 7).reshape(2,3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> transpose(a)
array([[1, 4],
[2, 5],
[3, 6]])
Tentu saja Anda tidak perlu melakukannya dengan cara ini karena Anda memiliki array 1D dan Anda dapat langsung membentuknya kembali menjadi (n, 1)
array dengan a.reshape((-1, 1))
atau a[:, None]
. Saya hanya ingin menunjukkan bagaimana transposing array bekerja.