3 Stimmen

Ist es nicht möglich, das 2D-Array in ein Array von Unterarrays mit den in numpy verfügbaren Funktionen zu patchen?

Ist es nicht möglich, das 2D-Array in ein Array von Unterrays mit den Funktionen np.reshape und np.split zu patchen?

import numpy as np
data = np.arange(24).reshape(4,6)
print data
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

answer = np.split(data,(-1,2,2),axis=1)

Erwartete Antwort ist:

answer = [[[ 0  1]
   [ 6  7]]

  [[ 2  3]
   [ 8  9]]

  [[ 4  5]
   [10 11]]    

 [[12 13]
   [18 19]]

  [[14 15]
   [20 21]]

  [[16 17]
   [22 23]]]

2voto

Kiwi Punkte 2618

split kann nicht gleichzeitig mit mehreren Achsen verwendet werden. Hier ist jedoch eine Lösung, die diese Operation zweimal verwendet:

In [1]: import numpy as np

In [2]: data = np.arange(24).reshape(4,6)

In [3]: chunk = 2, 2

In [4]: tmp = np.array(np.split(data, data.shape[1]/chunk[1], axis=1))

In [5]: answer = np.vstack(np.split(tmp, tmp.shape[1]/chunk[0], axis=1))

In [6]: answer
Out[6]: 
array([[[ 0,  1],
        [ 6,  7]],

       [[ 2,  3],
        [ 8,  9]],

       [[ 4,  5],
        [10, 11]],

       [[12, 13],
        [18, 19]],

       [[14, 15],
        [20, 21]],

       [[16, 17],
        [22, 23]]])

Ich ziehe jedoch die blockshaped Lösung vor, wie von Cyber bemerkt.

1voto

Jaime Punkte 62475

Sie könnten auch folgendes tun:

>>> data = np.arange(24).reshape(4,6)
>>> data_split = data.reshape(2, 2, 3, 2)
>>> data_split = np.transpose(data_split, (0, 2, 1, 3))
>>> data_split = data_split.reshape(-1, 2, 2) # das macht eine Kopie
>>> data_split
array([[[ 0,  1],
        [ 6,  7]],

       [[ 2,  3],
        [ 8,  9]],

       [[ 4,  5],
        [10, 11]],

       [[12, 13],
        [18, 19]],

       [[14, 15],
        [20, 21]],

       [[16, 17],
        [22, 23]]])

Wenn Sie wirklich split auf dieses Array aufrufen möchten, sollte dies ziemlich einfach sein, aber dieses umgeordnete Array wird sich in den meisten Einstellungen wie das von split zurückgegebene Tupel verhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X