【NumPy】配列の形状を変えるブロードキャスト(np.broadcast_to、np.broadcast_arrays)[Python]

  • URLをコピーしました!

NumPy

前回、NumPyでndarrayを分割するsplit、array_split、hsplit、vsplit、dsplitを紹介しました。

今回はNumPyで配列の形状を変えるブロードキャスト(np.broadcast_to、np.broadcast_arrays)を紹介します。

それでは始めていきましょう。

np.broadcast_to

「np.broadcast_to(配列, [形状])」では与えられた配列を繰り返し、与えられた形状と同じ形の配列にします。

import numpy as np

data = [1, 2, 3]

broadcasted_data = np.broadcast_to(data, [5, 3])

print(broadcasted_data)

実行結果
[[1 2 3]
 [1 2 3]
 [1 2 3]
 [1 2 3]
 [1 2 3]]

ここで重要なのは形状の最後は1次元目を示しているので、与えた配列と同じ形状でないとエラーとなります。

import numpy as np

data = [1, 2, 3]

broadcasted_data = np.broadcast_to(data, [3, 5])

print(broadcasted_data)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[3], line 5
      1 import numpy as np
      3 data = [1, 2, 3]
----> 5 broadcasted_data = np.broadcast_to(data, [3, 5])
      7 print(broadcasted_data)

(中略)

ValueError: operands could not be broadcast together with remapped 
shapes [original->remapped]: (3,)  and requested shape (3,5)

3次元配列以上にも変換することが可能です。

import numpy as np

data = [1, 2, 3]

broadcasted_data = np.broadcast_to(data, [2, 4, 3])

print(broadcasted_data)

実行結果
[[[1 2 3]
  [1 2 3]
  [1 2 3]
  [1 2 3]]

 [[1 2 3]
  [1 2 3]
  [1 2 3]
  [1 2 3]]]

broadcast_arrays

「broadcast_arrays(配列1, 配列2)」でお互いの配列の形状が合う様に変換します。

import numpy as np

data1 = [1, 2, 3]
data2 = [[4, 5, 6], [7, 8, 9]]

broadcasted_data = np.broadcast_arrays(data1, data2)

print(broadcasted_data)

実行結果
[array([[1, 2, 3],
       [1, 2, 3]]), array([[4, 5, 6],
       [7, 8, 9]])]

与えられる複数の配列の形状が違っていても、合う様に変換できる場合は変換されます。

import numpy as np

data1 = [1, 2, 3]
data2 = [[10], [11], [12], [13], [14]]

broadcasted_data = np.broadcast_arrays(data1, data2)

print(broadcasted_data)

実行結果
[array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]]), array([[10, 10, 10],
       [11, 11, 11],
       [12, 12, 12],
       [13, 13, 13],
       [14, 14, 14]])]

ただし形状が合う様に変換できない場合はエラーとなります。

import numpy as np

data1 = [1, 2, 3]
data2 = [[4, 5, 6], [7, 8, 9, 10]]

broadcasted_data = np.broadcast_arrays(data1, data2)

print(broadcasted_data)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[11], line 6
      3 data1 = [1, 2, 3]
      4 data2 = [[4, 5, 6], [7, 8, 9, 10]]
----> 6 broadcasted_data = np.broadcast_arrays(data1, data2)
      8 print(broadcasted_data)

(中略)

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.

次回はXXXXXを紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする