あなたは、インデックスの同じ種類を使用して、新しい配列にraveled配列からの要素を挿入し、最初のほつれとして配列(指定されたインデックスの順序を使用して)再形成と考えることができ
ラベリングのために使用されたように注文してください。
transpose
はビューですが、形状、ストライド、および順序が変更されています。行全体ではなく列を下げることによって、元の順序で要素を取得します。しかし、今度は、Cを順番にトランスポーズしてみてください。要素はシャッフルされます。元の1 2 3 4 5 6 ...になる1 4 7 2 5 8 3 ...コピーせずにその注文を得ることはできません。
In [48]: a=np.arange(1,7).reshape(3,2)
In [49]: a
Out[49]:
array([[1, 2],
[3, 4],
[5, 6]])
arange
[1,2,3....]
を生成した。そのデータバッファはまだa
で使用されており、行全体を読み取ることで '回復'できます。
In [50]: b = a.T
In [51]: b
Out[51]:
array([[1, 3, 5],
[2, 4, 6]])
トランスポーズは、形状、ストライド、および順序を変更することによって生成されます。今はorder = 'F'です。 (私は.flags
と.__array_interface__
でこれを示すことができる。これは、ビューだし、まだ元のarange
値を共有しています。今だけ、なぜなら進歩と秩序の、あなたが列を下に読み。
In [52]: c = b.reshape(3,2)
In [53]: c
Out[53]:
array([[1, 3],
[5, 2],
[4, 6]])
これは、同じ形状を有し、進歩、そして「C」a
としてオーダー。しかし、データバッファ元[1,3,5,2..]
の並べ替えコピーである。それはあなたが行全体で読み取ることにより、b
から取得したいのと同じ順序です。
見て別の方法並べ替え時にc
にある元の要素の順序1,2,3をトレースします。
[0,0],[1,1],[0,1],[2,0],[1,0],[2,1]
または2つのインデックスリストと:
In [57]: a[[0,0,1,1,2,2],[0,1,0,1,0,1]] # regular pattern
Out[57]: array([1, 2, 3, 4, 5, 6])
In [58]: b[[0,1,0,1,0,1],[0,0,1,1,2,2]] # same, switch order
Out[58]: array([1, 2, 3, 4, 5, 6])
In [59]: c[[0,1,0,2,1,2],[0,1,1,0,0,1]] # a jumble
Out[59]: array([1, 2, 3, 4, 5, 6])
、それはそれのビューを作成した場合、その後np.may_share_memoryはtrueを返す必要がありますが、私の質問の場合、それは私が知っている理由があればいけない偽を返します(3,2)u write(3,2)の場合には、(3 * 2)のような書き換えの代わりに、reshape関数で、np.may_share_memory関数がtrueを返します。私は確信していませんが、それは私が推測することですそれは私が推測するそれのコピーを作る3 * 2に関連する何かがあります。 – Mayank