1. ホーム
  2. python

Numpy 配列をコピーせずに連結する

2023-07-30 16:49:40

質問

Numpyでは、2つの配列を端から端まで連結することができます。 np.append または np.concatenate :

>>> X = np.array([[1,2,3]])
>>> Y = np.array([[-1,-2,-3],[4,5,6]])
>>> Z = np.append(X, Y, axis=0)
>>> Z
array([[ 1,  2,  3],
       [-1, -2, -3],
       [ 4,  5,  6]])

しかし、これらは入力配列のコピーを作成します。

>>> Z[0,:] = 0
>>> Z
array([[ 0,  0,  0],
       [-1, -2, -3],
       [ 4,  5,  6]])
>>> X
array([[1, 2, 3]])

二つの配列を連結して ビュー に連結する方法はありますか?そのためには np.ndarray サブクラスが必要でしょうか?

どのように解決するのですか?

Numpy配列に属するメモリは連続である必要があります。別々に割り当てた場合、メモリ上にランダムに散らばってしまい、ビューNumpy配列として表現する方法がありません。

必要な配列の数があらかじめ分かっている場合は、代わりにあらかじめ確保した1つの大きな配列から始めて、それぞれの小さな配列は大きな配列に対するビュー(例えばスライスで得られる)とすることができます。