numpyのrollaxisおよびswapaxes関数を理解する
Understand Numpys Rollaxis
これらの2つの関数を理解する前に、まずnumpy配列の軸を理解する必要があります
軸(軸)は、配列内の次元のシンボルです。次元の観点から説明するには抽象的すぎます。例を挙げて説明できます
学生のスコアシートがあり、スコアシートが座席ごとに配置されていて、スコアシートが次のようになっているとします。
78 | 3. 4 | 87 | 25 | 83 |
25 | 67 | 97 | 22 | 13 |
78 | 43 | 87 | フォーファイブ | 89 |
この場合、このテーブルの横軸は行、縦軸は列です。計算を行う軸を指定する行または列の平均スコアまたは最高スコアを計算できます。テーブルを2次元配列として扱い、追加します。上の配列の添え字は次のテーブルになります:[[78,34,87,25,83]、[25,67,97,22,13]、[ 78,43,87,45,89]]
78(00) | 3. 4(01) | 87(02) | 25(03) | 83(04) |
25(10) | 67(十一) | 97(12) | 22(13) | 13(14) |
78(20) | 43(21) | 87(22) | フォーファイブ(2. 3) | 89(24) |
import numpy as np a = np.array([[78, 34, 87, 25, 83], [25, 67, 97, 22, 13], [78, 43, 87, 45, 89]]) print(a.max(axis=0)) print(a.max(axis=1))
印刷
[78 67 97 45 89] [87 97 89]
ここから、axis = 0が縦軸のデータであり、最初の行が各列の最大値を出力し、axis = 1が横軸であることがわかります。
以下では、2X2の3次元配列を使用します:[[[0、1]、[2、3]]、[[4、5]、[6、7]]]
0(000) | 1(001) |
2(010) | 3(011) |
4(100) | 5(101) |
6(110) | 7(111) |
import numpy as np a = np.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) print(a.max(axis=0)) print('
') print(a.max(axis=1)) print('
') print(a.max(axis=2))
コンテンツを印刷します:[[4 5] [6 7]] [[2 3] [6 7]] [[1 3] [5 7]]
ここでの最大値は、1次元配列を要素として扱うことです。
軸が0と1の場合、2次元配列と同じ
axis = 2に焦点を合わせます。このとき、配列の3番目の添え字をグループとして一致させるために、1次元配列の内容が変更されました。
[0(000)、2(010)] | [1(001)、3(011)] |
[4(100)、6(110)] | [5(101)、7(111)] |
多次元配列の軸が配列の添え字に関連していることがわかります
それでは、rollaxis関数について説明しましょう。この関数には3つのパラメーターがあります。
numpy.rollaxis(arr、axis、start)
arr:入力配列
axis:後方にスクロールされる軸。他の軸の相対位置は変更されません。
start:デフォルトはゼロです。これは完全なスクロールを意味します。特定の位置にスクロールします
コードを実行します。
import numpy as np a = np.arange(8).reshape(2, 2, 2) print'Original array:' print a print '
' # Scroll axis 2 to axis 0 (width to depth) print'Call the rollaxis function:' print np.rollaxis(a, 2) # Scroll axis 0 to axis 1: (width to height) print '
' print'Call the rollaxis function:' print np.rollaxis(a, 2, 1)
印刷:
Original array: [[[0 1] [2 3]] [[4 5] [6 7]]] Call the rollaxis function: [[[0 2] [4 6]] [[1 3] [5 7]]] Call the rollaxis function: [[[0 2] [1 3]] [[4 6] [5 7]]]
プログラムがnp.rollaxis(a、2)を実行すると、軸2が軸0の前にスクロールされ、軸2に対する他の軸の位置は変更されません(開始のデフォルトは0)。配列の添え字の並べ替えが変更されます。 0、1、2から1、2、0まで
このとき、配列は添え字順に再編成されます。たとえば、最初の配列の[0,1]の添え字は[000,001]であり、0の添え字は値に影響を与えず、位置1の添え字は001から010に変更されます。ビットインデックスはにスクロールします。最後のビットインデックスの後ろにあり、値が1(001)から2(010)に変わります。
0(000)-> 0(000) | 1(001)-> 2(010) |
2(010)-> 4(100) | 3(011)-> 6(110) |
4(100)-> 1(001) | 5(101)-> 3(011) |
6(110)-> 5(101) | 7(111)-> 7(111) |
軸のスクロールは下付き文字のスクロールであると結論付けることができます。同様に、np.rollaxis(a、2、1)を実行すると、添え字0,1,2は0,2になります。
numpy.swapaxes(arr、axis1、axis2)関数は交換であり、axis1とaxis2を交換します。