こんにちは、人です。
三次元の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")
コメント