8

I want to reorder dimensions of my numpy array. The following piece of code works but it's too slow.

for i in range(image_size):
    for j in range(image_size):
        for k in range(3):
            new_im[k, i, j] = im[i, j, k]

After this, I vectorize the new_im:

new_im_vec = new_im.reshape(image_size**2 * 3)

That said, I don't need new_im and I only need to get to new_im_vec. Is there a better way to do this? image_size is about 256.

4

3 に答える 3

11

軸をシフトする関数であるrollaxisを確認してください。これにより、単一のコマンドで配列を並べ替えることができます。i、j、k のim形をしている場合

rollaxis(im, 2)

形状k, i, jの配列を返す必要があります。

この後、配列をフラット化できます。ravelはこの目的のための明確な関数です。これをすべてまとめると、素晴らしいワンライナーがあります。

new_im_vec = ravel(rollaxis(im, 2))
于 2013-07-09T21:32:18.323 に答える