2016-12-08 110 views
1

我有一個4d numpy數組,代表一個帶有3d實例的數據集。 可以說陣列的形狀是(32, 32, 3, 73257)重新排列一個4d numpy數組

如何將數組的形狀更改爲(73257, 32, 32, 3)

---問題更新 看起來,rollaxis和轉置都有竅門。

Thanx for reply!

+1

相關 - http://stackoverflow.com/questions/41022182/change-shape-of-nparray – Divakar

+0

如果你用'(3,0,1,2)'' – Eric

+0

''transpose'也可以在這裏工作你是對的。我會盡快糾正我的答覆。 – Panos

回答

4

np.transpose功能不正是你想要的,你可以通過它控制你想換哪個軸的軸參數:

a = np.empty((32, 32, 3, 73257)) 
b = np.transpose(a, (3, 0, 1, 2)) 

b的軸是a的置換版本:b的軸0是a的第3軸,b的軸1是a等的第0軸...

這樣,可以指定在第二或第三位想要的大小32的軸線的:

b = np.transpose(a, (3, 1, 0, 2)) 

也給出了所希望的形狀的陣列,但是與前一個不同。

0

它看起來像np.rollaxis(arr, axis=-1)會做你想做的。例如:

>>> arr = np.empty(32, 32, 3, 73257) 
>>> arr2 = np.rollaxis(arr, axis=-1) 
>>> arr2.shape 
(73257, 32, 32, 3) 

這將使arr[i,j,k,l] == arr2[l,i,j,k]所有ijkl