做着同樣一個良好的和簡單的方式捲起或切片或切片週期性條件是使用模和numpy的。重塑。 例如
import numpy as np
a = np.random.random((3,3,3))
array([[[ 0.98869832, 0.56508155, 0.05431135],
[ 0.59721238, 0.62269635, 0.78196073],
[ 0.03046364, 0.25689747, 0.85072087]],
[[ 0.63096169, 0.66061845, 0.88362948],
[ 0.66854665, 0.02621923, 0.41399149],
[ 0.72104873, 0.45633403, 0.81190428]],
[[ 0.42368236, 0.11258298, 0.27987449],
[ 0.65115635, 0.42433058, 0.051015 ],
[ 0.60465148, 0.12601221, 0.46014229]]])
可以說我們需要切片[0:3; 1:1,0:3],其中3:1是壓延片。
a[0:3, -1:1, 0:3]
array([], shape=(3, 0, 3), dtype=float64)
這是非常正常的。解決方案是:
sl0 = np.array(range(0,3)).reshape(-1,1, 1)%a.shape[0]
sl1 = np.array(range(-1,1)).reshape(1,-1, 1)%a.shape[1]
sl2 = np.array(range(0,3)).reshape(1,1,-1)%a.shape[2]
a[sl0,sl1,sl2]
array([[[ 0.03046364, 0.25689747, 0.85072087],
[ 0.98869832, 0.56508155, 0.05431135]],
[[ 0.72104873, 0.45633403, 0.81190428],
[ 0.63096169, 0.66061845, 0.88362948]],
[[ 0.60465148, 0.12601221, 0.46014229],
[ 0.42368236, 0.11258298, 0.27987449]]])
不要看到優勢超過滾動(這基本上是它所做的)。目前,你可能可能輕微擊敗速度明智的連接電話。編輯:對不起,你不一定需要整個座標軸,所以當然是有區別的,只是沒有在這個例子中。 – seberg 2013-02-27 15:58:24