0

例えば

変換前

array([[0, 0, 0],
       [0, 1, 1],
       [1, 0, 1],
       [1, 1, 0]])

変換後

array([[[0, 0], [0]],
       [[0, 1], [1]],
       [[1, 0], [1]],
       [[1, 1], [0]]])

行をループし、各行([0、0、0]など)を2つのリスト([[0、0]、[0]]など)にスライスすることでそれを行いました。派手なスタイルのショートカットはありますか?

4

1 に答える 1

1

私が推測する派手なnumpyインデックス作成を行うことができます:

>>> a=np.arange(12).reshape(4,3)
>>> a
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
>>> b=np.array([a[:,0:2].tolist(),a[:,2:3].tolist()])
>>> b
array([[[0, 1], [3, 4], [6, 7], [9, 10]],
       [[2], [5], [8], [11]]], dtype=object)
>>> b[0][0][0],b[0][0][1],b[1][0][0]
(0, 1, 2)

を追加.tolist()すると、 のコピーが作成されますa

bまたは、内部のオブジェクトをへの参照またはビューのままにしたい場合a:

>>> b=np.array([a[:,0:2],a[:,2:3]])
>>> b
array([[[0 1], [3 4], [6 7], [ 9 10]],
       [[2], [5], [8], [11]]], dtype=object)
>>> b[0][0][0],b[0][0][1],b[1][0][0]
(0, 1, 2)

その後、次bの場合に変更されaます。

>>> a[0][0]=23
>>> a
array([[23,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
>>> b
array([[[23  1], [3 4], [6 7], [ 9 10]],
       [[2], [5], [8], [11]]], dtype=object)
>>> b[0][0].flags['OWNDATA']
False
于 2013-06-02T14:24:37.910 に答える