Numpyのtranspose のアルゴリズムを教えてください
以下のようなn次元配列A (1x2x3x4)を 軸を入れ替えて 例えばn次元配列[3x4x1x2]にするのが transposeメソッドですが、これをfor文で書くとどうなりますか?
JavaScript
1// 例 x:入力 2x=[ 3 [ 4 [ 5 [1,2,3,4], 6 [5,6,7,8], 7 [9,10,11,12], 8 ], 9 [ 10 [1,2,3,4], 11 [5,6,7,8], 12 [9,10,11,12], 13 ], 14 ] 15] 16 17 // 出力:out 18 // 初期化 19 let out = [] 20 for (let d0 = 0 ; d0 < x[0][0].length; d0++){ 21 out[d0] = [] 22 for (let d1 = 0 ; d1 < x[0][0][0].length ; d1++){ 23 out[d0][d1] = [] 24 for (let d2 = 0 ; d2 < x.length ; d2++){ 25 out[d0][d1][d2] = [] 26 for (let d3 = 0 ; d3 < x[0].length ; d3++){ 27 out[d0][d1][d2][d3] = 0 28 } 29 } 30 } 31 } 32
【追加質問です】
6次元のデータを使った例です。
numpy の場合、out = x.transpose(0, 4, 5, 1, 2, 3) です。
JavaScript
1<script> 2// 例 x:入力 6次元配列(1x1x3x3x4x4) 3// -> out :出力 6次元配列(1x4x4x1x3x3) へ軸変換 4 5x=[ 6 [[ 7 // * 8 [ 9 [ 10 [1,1,1,1], 11 [1,1,1,1], 12 [1,1,1,1], 13 [1,1,1,1], 14 ], 15 [ 16 [1,1,1,1], 17 [1,1,1,1], 18 [1,1,1,1], 19 [1,1,1,1], 20 ], 21 [ 22 [1,1,1,1], 23 [1,1,1,1], 24 [1,1,1,1], 25 [1,1,1,1], 26 ], 27 ], 28 29 // ** 30 [ 31 [ 32 [1,1,1,1], 33 [1,1,1,1], 34 [1,1,1,1], 35 [1,1,1,1], 36 ], 37 [ 38 [1,1,1,1], 39 [1,1,1,1], 40 [1,1,1,1], 41 [1,1,1,1], 42 ], 43 [ 44 [1,1,1,1], 45 [1,1,1,1], 46 [1,1,1,1], 47 [1,1,1,1], 48 ], 49 ], 50 // *** 51 [ 52 [ 53 [1,1,1,1], 54 [1,1,1,1], 55 [1,1,1,1], 56 [1,1,1,1], 57 ], 58 [ 59 [1,1,1,1], 60 [1,1,1,1], 61 [1,1,1,1], 62 [1,1,1,1], 63 ], 64 [ 65 [1,1,1,1], 66 [1,1,1,1], 67 [1,1,1,1], 68 [1,1,1,1], 69 ], 70 ], 71 72 ]] 73] 74 75console.log(x) 76 77let out = [] 78for (let d0 = 0 ; d0 < x.length; d0++){//1 79 out[d0] = [] 80 for (let d1 = 0 ; d1 < x[0][0][0][0].length ; d1++){//4 81 out[d0][d1] = [] 82 for (let d2 = 0 ; d2 < x[0][0][0][0][0].length ; d2++){//4 83 out[d0][d1][d2] = [] 84 for (let d3 = 0 ; d3 < x[0].length ; d3++){//1 85 out[d0][d1][d2][d3] = [] 86 for (let d4 = 0 ; d4 < x[0][0].length ; d4++){//3 87 out[d0][d1][d2][d3][d4] = [] 88 for (let d5 = 0 ; d5 < x[0][0][0].length ; d5++){//3 89 console.log(`out[${d0}][${d1}][${d2}][${d3}][${d4}][${d5}] = ${x[d0][d4][d5][d1][d2][d3]}`); 90 out[d0][d1][d2][d3][d4][d5] = x[d0][d4][d5][d1][d2][d3] 91 } 92 } 93 } 94 } 95 } 96} 97console.log(out) 98</script>
実行すると、
Uncaught TypeError: Cannot read property '0' of undefined
のエラーでストップします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/14 06:54
2019/10/14 07:08 編集
2019/10/14 07:10
2019/10/14 07:56 編集
2019/10/14 07:57
2019/10/14 08:19
2019/10/14 08:21
2019/10/14 08:37
2019/10/14 09:34
2019/10/14 10:43 編集
2019/10/14 10:51
2019/10/14 11:40