NumPy
前回、NumPyでndarrayを分割するsplit、array_split、hsplit、vsplit、dsplitを紹介しました。
あわせて読みたい


【NumPy】ndarrayを分割するsplit、array_split、hsplit、vsplit、dsplit[Python]
NumPy 前回、Pandasのgroupbyでキーによるグルーピングをして統計値を算出する方法を紹介しました。 今回はNumPyでndarrayを分割するsplit、array_split、hsplit、vspli…
今回は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を紹介します。
ではでは今回はこんな感じで。
コメント