1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【python】一次元配列と二次元配列の結合

Last updated at Posted at 2022-12-21

やりたいことのイメージ

一次元配列と二次元配列の結合をしたい。
配列のイメージとしては以下の通り。

  • 二次元配列
    サンプルとしてRBG値を格納した二次元配列を想定
R G B
0 128 255
255 128 0
255 0 128
0 255 128
  • 一次元配列
    サンプルとして優先度(priority)を格納した一次元配列を想定
priority
2
3
1
4

結合結果のイメージ

R B G priority
0 128 255 2
255 128 0 3
255 0 128 1
0 255 128 4

一次元配列と二次元配列の結合の処理の流れ

  1. 一次元配列の二次元配列化
  2. 二次元配列化された一次元配列と二次元配列の結合

使用する関数等

名称 説明
numpy ベクトルや行列の演算を行うのに便利なライブラリ
numpy.array 多次元配列(ndarray)を生成するための関数
ndarray.reshape() 配列の形状変更をする
numpy.hstack() 二次元配列を横方向に結合する
numpy.concatenate() 配列を結合する
引数axis=0で縦方向(デフォルト)axis=0で横方向に結合される

詳しい使い方は実際のコードにて

実際のコード

main.py
import numpy as np

def main():

  # 元データ
  rgb_data = np.array([[0,128,255],[255,128,0],[255,0,128],[0,255,128]])
  priority_data = np.array([2,3,1,4])

  print('--- original_data ---')
  print(rgb_data)
  print(priority_data)

  # hstackを使って横方向に結合
  # priority_dataをreshapeして縦4横1の二次元配列化する
  priority_reshape_beside = priority_data.reshape(4, 1) 
  # 横方向に結合(一番右に一行追加される)
  rgb_priority_hstack = np.hstack([rgb_data, priority_reshape_beside]) 
  print('--- hstack ---')
  print(rgb_priority_hstack)

  # concatenateを使って横方向に結合
  # axis=1なので横方向に結合
  rgb_priority_concatenate_horizontal = np.concatenate([rgb_data, priority_reshape_beside], axis=1) 
  print('--concatenate horizontal--')
  print(rgb_priority_concatenate_horizontal)

  # おまけ----------------------------------------------------------------------
  # vstackを使って縦方向に結合
  # データ数を合わせる
  priority_data_2 = np.array([2,3,1]) 
  # priority_dataをreshapeして縦1横3の二次元配列化する
  priority_reshape_vertical = priority_data_2.reshape(1, 3) 
  # 縦方向に結合(下に追加される)
  rgb_priority_vstack = np.vstack([rgb_data, priority_reshape_vertical]) 
  print('--- vstack ---')
  print(rgb_priority_vstack)
  print('--------------')

  # concatenateを使って縦方向に結合
  # axis=0なので縦方向に結合
  rgb_priority_concatenate_vertical = np.concatenate([rgb_data, priority_reshape_vertical], axis=0) 
  print('--concatenate vertical--')
  print(rgb_priority_concatenate_vertical)

  # 要素番号3(priority)を指定して昇順にソート
  rgb_priority_argsort_up = rgb_priority_hstack[np.argsort(rgb_priority_hstack[:, 3])]
  print('--argsort up--')
  print(rgb_priority_argsort_up)

  # 要素番号3(priority)を指定して降順[::-1]にソート
  rgb_priority_argsort_down = rgb_priority_hstack[np.argsort(rgb_priority_hstack[:, 3])[::-1]]
  print('--argsort down--')
  print(rgb_priority_argsort_down)

if __name__ == '__main__':
  main()

実行結果

--- original_data ---
[[  0 128 255]
 [255 128   0]
 [255   0 128]
 [  0 255 128]]
[2 3 1 4]
--- hstack ---
[[  0 128 255   2]
 [255 128   0   3]
 [255   0 128   1]
 [  0 255 128   4]]
--concatenate horizontal--
[[  0 128 255   2]
 [255 128   0   3]
 [255   0 128   1]
 [  0 255 128   4]]
--- vstack ---
[[  0 128 255]
 [255 128   0]
 [255   0 128]
 [  0 255 128]
 [  2   3   1]]
--------------
--concatenate vertical--
[[  0 128 255]
 [255 128   0]
 [255   0 128]
 [  0 255 128]
 [  2   3   1]]
--argsort up--
[[255   0 128   1]
 [  0 128 255   2]
 [255 128   0   3]
 [  0 255 128   4]]
--argsort down--
[[  0 255 128   4]
 [255 128   0   3]
 [  0 128 255   2]
 [255   0 128   1]]

さいごに

一次元配列同士、二次元配列同士の結合方法はすぐ見つけられましたが、一次元配列×二次元配列の結合はなかなか見つけられなかったので。
python初心者ですが、python便利!感じた一件でした。

配列について調べていると行列が縦方向か横方向かわからなくなるので自分用メモ
行列説明.png

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?