三次元配列を二次元配列に変換する方法【Python】

python

こんにちは、人です。

三次元のnumpy配列を二次元のnumpy配列にする方法を書きます(下の図参照)。

[ [[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]] ]
  ↓ ↓ ↓ 
[[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]]
[[ ○ ○ ○ ○ ○ ]]

対象読者

基本的なプログラミングの知識がある方
pythonを使っている方
OpenCVを用いて画像処理を行なっている方

この記事を書いた理由

確率的ハフ変換による戻値が三次元配列となっているため、二次元配列に変換しました。
(その後、要素をいじりたかったので、三次元配列だとやりにくかった。。。)
for文で回すことで解決しました。自分でやってみるとややこしくて面倒くさいので、この記事が誰かの役に立つと思います。

プログラム開発環境

パソコンについて
・PC : MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
・OS : macOS Big Sur
・Processor : 2.3GHz Quad-Core Intel Core i5
・memory : 16GB
ソフトについて
・Spyder
・python 3.7.7

numpy配列とlist

こちらの記事ではnumpy配列とlistという言葉が出てきますが、以下のように使い分けています。
numpy配列 : [ ○ ○ ○ ○ ○ ]   (要素が空白で区切られている)
list      : [ ○, ○, ○, ○, ○ ]  (要素がコンマで区切られている)

プログラム

まずは必要なモジュールをインポートしましょう。

import numpy as np

それでは早速numpy配列を準備しましょう。(確率的ハフ変換の戻値も以下のようになります。)

three_d = np.array(
    [[[743, 946, 1487, 920]],
     [[ 81, 598, 1560, 546]],
     [[320, 962, 1233, 930]],
     [[ 81, 596, 1599, 543]],
     [[583, 637, 1576, 602]],
     [[81 , 600,  943, 570]]]
    )

では実際にnumpy配列を確認してみましょう。

print(three_d)

実行結果は以下の写真のようになるはずです。

ちゃんと三次元のnumpy配列ですね。

ここからが本番。二次元配列に変換します。

result = []
for i in range(len(three_d)):
    for j in range(len(three_d[i])):
        my_list = []
        for k in range(len(three_d[i][j])):
            my_list.append(three_d[i][j][k])
    result.append(my_list)

こちらも確認してみましょう。

print(result)

実行結果は。。。

listになっているのでnumpy配列に変換しましょう。

result = np.array(result)

結果を見てみます。

二次元配列にすることができました。

最後にコード全体を載せておきます。


import numpy as np

three_d = np.array(
    [[[743, 946, 1487, 920]],
     [[ 81, 598, 1560, 546]],
     [[320, 962, 1233, 930]],
     [[ 81, 596, 1599, 543]],
     [[583, 637, 1576, 602]],
     [[81 , 600,  943, 570]]]
    )
print(three_d)

result = []
for i in range(len(three_d)):
    for j in range(len(three_d[i])):
        my_list = []
        for k in range(len(three_d[i][j])):
            my_list.append(three_d[i][j][k])
    result.append(my_list)
    
print("確認1")
print(result)
print("確認2")
result = np.array(result)
print(result)
print("確認3")

コメント

タイトルとURLをコピーしました