'Stack the same row in each layer of a 3D numpy array
Hi is there a way to efficiently stack the same row in each layer of a 3D numpy array? I have an array like this:
 a = np.array([[["a111","a112","a113"],
                ["b","b","b"],
                ["c","c","c"],
                ["d","d","d"]],
               [["a211","a212","a213"],
                ["b","b","b"],
                ["c","c","c"],
                ["d","d","d"]],
              [["a311","a312","a313"],
                ["b","b","b"],
                ["c","c","c"],
                ["d","d","d"]],
             [["a411","a412","a413"],
                ["b","b","b"],
                ["c","c","c"],
                ["d","d","d"]]])
and i want to get something like this:
np.array([[["a111","a112","a113"],
                ["a211","a212","a213"],
                ["a311","a312","a313"],
                ["a411","a412","a413"]],
               [["b","b","b"],
                ["b","b","b"],
                ["b","b","b"],
                ["b","b","b"]],
               [["c","c","c"],
                ["c","c","c"],
                ["c","c","c"],
                ["c","c","c"]],
               [["d","d","d"],
                ["d","d","d"],
                ["d","d","d"],
                ["d","d","d"]]])
Right now I'm looping through the whole array and stacking it manually.
Solution 1:[1]
Use swapaxes:
a.swapaxes(0,1)
output:
array([[['a111', 'a112', 'a113'],
        ['a211', 'a212', 'a213'],
        ['a311', 'a312', 'a313'],
        ['a411', 'a412', 'a413']],
       [['b', 'b', 'b'],
        ['b', 'b', 'b'],
        ['b', 'b', 'b'],
        ['b', 'b', 'b']],
       [['c', 'c', 'c'],
        ['c', 'c', 'c'],
        ['c', 'c', 'c'],
        ['c', 'c', 'c']],
       [['d', 'd', 'd'],
        ['d', 'd', 'd'],
        ['d', 'd', 'd'],
        ['d', 'd', 'd']]], dtype='<U4')
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | mozway | 
