我希望能夠沿高度軸向任一方向移動3D numpy陣列。 如果給出了說3的正向移位,則數組中的所有值都會上移,並在數組的底部出現3個新的零片。如果發生負移動,則會出現相反情況,所有切片沿高度軸向下移動,並在頂部出現新的零切片。轉移3D numpy陣列
我試圖將數組重新整形爲1D並左右移動,然後返回到3D。但是,這會使陣列沿錯誤的方向移動。我嘗試在重塑之前實施numpy.rollaxis,從而沿正確的軸移動。但是我正在研究的系統不能識別所有numpy函數,也不會執行rollaxis。
謝謝!
我希望能夠沿高度軸向任一方向移動3D numpy陣列。 如果給出了說3的正向移位,則數組中的所有值都會上移,並在數組的底部出現3個新的零片。如果發生負移動,則會出現相反情況,所有切片沿高度軸向下移動,並在頂部出現新的零切片。轉移3D numpy陣列
我試圖將數組重新整形爲1D並左右移動,然後返回到3D。但是,這會使陣列沿錯誤的方向移動。我嘗試在重塑之前實施numpy.rollaxis,從而沿正確的軸移動。但是我正在研究的系統不能識別所有numpy函數,也不會執行rollaxis。
謝謝!
你的問題有點不明確。首先,「高度」軸並不是一個非常明確的定義,您在3D數組中使用哪一個。根據形狀元組中的位置來定位它們會更好。我將把它作爲'沿着第一軸'的含義,但是應該明白如何爲另一個軸做它。第二,雖然很明顯你想要零填充移位的數據,但是你不能指定你想對另一邊的數據做什麼:它是否應該消失在數組的邊界之外並且會丟失?或者應該擴展數組以保持一切?
對於前者,numpy具有roll
函數,其功能類似於您所需,但不是用零填充,而是從數組的另一端複製數據。你可以簡單地用零事後替換此:
>>> a = np.arange(60).reshape(3, 4, 5)
>>> a
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44],
[45, 46, 47, 48, 49],
[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59]]])
>>> b = np.roll(a, 2, axis=0)
>>> b[:2,:, :] = 0
>>> b
array([[[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]]])
有轉變是消極的,而不是b[:shift, :, :] = 0
你會去b[-shift:, :, :] = 0
。
如果你不想丟失數據,那麼你基本上只是在數組的頂部或底部添加零片。對於前三個維度,numpy的有vstack
,hstack
,並且dstack
,並vstack
應該是一個你是後:
>>> a = np.arange(60).reshape(3, 4, 5)
>>> b = np.vstack((np.zeros((2,)+a.shape[1:], dtype=a.dtype), a))
>>> b
array([[[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44],
[45, 46, 47, 48, 49],
[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59]]])
如果你想在底部附加零點,只需更改參數的順序對堆疊功能的調用。
你可以發佈你的嘗試到目前爲止,讓我們知道你遇到了什麼錯誤嗎? – Ren 2013-04-09 08:14:50
請參閱http://stackoverflow.com/questions/2777907/python-numpy-roll-with-padding – YXD 2013-04-09 09:49:35
你又是什麼意思「但我正在工作的系統不能識別所有的numpy功能」? – YXD 2013-04-09 10:12:32