numpy.transpose – 配列の転置

numpy.transoposeは、配列を転置する(軸を反対に入れ替える)関数です。

実際のコードで確認していきましょう。

目次

1. np.transposeの使い方

まずは基本的な書き方を確認しましょう。

numpy.transpose

書き方:

np.argsort(a, axes=None)

パラメーター:

引数   解説
a  array_like  配列を渡します。
axes(optional)  list of int    
デフォルトでは各軸を逆向きにします。例えば、shape(M, N)の2次元配列ならshape(N, M)に、shape(M, N,O)の3次元配列ならshape(O, N, M)にします。指定した場合は、指定したaxisの順番に変更します。

戻り値: 

ndarray:軸が変換された配列を戻します。

注:axesキーワード引数を使て、テンソルを反転するためには、transpose(a, argsort(axes))を使います。

一緒に確認したい関数:

  • moveaxis, argsort

それでは、使い方を見てみましょう。

1.1. 配列の軸を入れ替える

np.transpose()は、配列の軸を入れ替える(逆にする)関数です。

1次元配列の場合は、入れ替える軸が1つしかないため、以下のコードのように引数に渡した配列をそのまま返します。

In [1]:
'''  1次元配列は軸が1つしかないので変わらない  '''
import numpy as np
arr = np.array([1, 2, 3])
np.transpose(arr)
Out[1]:
array([1, 2, 3])

2次元配列の場合は、行と列の2つの軸を入れ替えます。例えば、元の配列がshape(N, M)なら、関数から戻ってくる配列はshape(M, N)になります。

以下のコードをご確認ください。

In [2]:
'''  2次元配列では行と列を入れ替える  '''
arr = np.arange(6).reshape(2, 3)
print('arr: \n', arr,)
print('arr.shape: \n', arr.shape, '\n')
print('transposed: \n', np.transpose(arr))
print('transposed.shape: \n', np.transpose(arr).shape)
arr: 
 [[0 1 2]
 [3 4 5]]
arr.shape: 
 (2, 3) 

transposed: 
 [[0 3]
 [1 4]
 [2 5]]
transposed.shape: 
 (3, 2)

3次元配列の場合は、軸が、奥行きと行と列の3つあります。

np.transpose()は、軸を入れ替える(逆にする)ので、例えば、元の配列がshape(N, M, O)なら、関数から戻ってくる配列はshape(O, M, N)になります。

In [3]:
'''  3次元配列では奥行きと列を入れ替える  '''
arr = np.arange(24).reshape(2, 3, 4)
print('arr: \n', arr,)
print('arr.shape: \n', arr.shape, '\n')
print('transposed: \n', np.transpose(arr))
print('transposed.shape: \n', np.transpose(arr).shape)
arr: 
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
arr.shape: 
 (2, 3, 4) 

transposed: 
 [[[ 0 12]
  [ 4 16]
  [ 8 20]]

 [[ 1 13]
  [ 5 17]
  [ 9 21]]

 [[ 2 14]
  [ 6 18]
  [10 22]]

 [[ 3 15]
  [ 7 19]
  [11 23]]]
transposed.shape: 
 (4, 3, 2)

1.2. 入れ替える軸の順番を指定する

np.transpose()はデフォルトなら、元の配列の軸を反対にします。

この時、オプション引数のaxes(axisの複数形)を指定すると、入れ替える軸の順番を指定することができます。

例えば、shape(M, M, O)の3次元配列を、np.transpose()に渡せば、デフォルトではshape(O, M, N)で戻ってきます。この入れ替えの順番を指定することができるのです。

3次元配列では、axis=0は「奥行きM」、axis=1は「行N」、axis=2は「列O」です。

そのため、(1, 2, 0)と指定すれば、戻ってくる配列はshape(N, O, M)になりますし、(0, 2, 1)と指定すれば、戻ってくる配列はshape(M, O, N)になります。

2次元配列では軸が2つしかないため、これは意味を成しません。これを使うのは3次元配列以上の場合です。

それでは、以下のコードを確認してみましょう。

In [4]:
'''  axeseで入れ替える軸を指定(3次元配列以上))  '''
arr = np.arange(24).reshape(2, 3, 4)
print('arr: \n', arr,)
print('arr.shape: \n', arr.shape, '\n')
#  軸を、奥行き、列、行の順番に入れ替える。
print('transposed: \n', np.transpose(arr, (0, 2, 1)))
print('transposed.shape: \n', np.transpose(arr, (0, 2, 1)).shape)
arr: 
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
arr.shape: 
 (2, 3, 4) 

transposed: 
 [[[ 0  4  8]
  [ 1  5  9]
  [ 2  6 10]
  [ 3  7 11]]

 [[12 16 20]
  [13 17 21]
  [14 18 22]
  [15 19 23]]]
transposed.shape: 
 (2, 4, 3)

2. まとめ

以上が、numpy.transpose()の使い方です。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる