我有一個較大的圖像A
和一個較小的圖像B
,都表示爲2-D numpy
陣列。我想使用A
作爲畫布,並在其上面編寫B
的譯文,並以六角形排列。我無法理解的部分是如何處理圖像,以便圖像在垂直和水平方向上都包裹 - 基本上我想要的是將(填充的,必要時)子圖像定期鑲嵌到圓環上。分配給一個numpy陣列的包裝切片
我見過的numpy.take
和numpy.roll
討論在 wrapping around slices in Python/numpy和展示我如何訪問和返回副本陣列的包裹片的,但我想分配給該-即對於任意整數rowOffset
和columnOffset
我想做的相當於:
A = numpy.zeros((5,11), int)
B = numpy.array([[1,2,3,4,5,6,7]]) * numpy.array([[10,100,1000]]).T
# OK, we wouldn't be able to fit more than one or two copies of B into A, but they demonstrate the wrapped placement problem
wrappedRowIndices = (numpy.arange(B.shape[0]) + rowOffset) % A.shape[0]
wrappedColumnIndices = (numpy.arange(B.shape[1]) + columnOffset) % A.shape[1]
A[ wrappedRowIndices, : ][ :, wrappedColumnIndices ] = B
我從評論on the question, 和片刻的思考方式看numpy
陣列被表示,以這種需求的方式,包裝的切片無法以view
的形式返回。
是否有(Y)以這種方式指定給數組的包裝切片的方法,或(X)用於執行我想要實現的鑲嵌類型的現有實用程序?
怎麼會是六邊形的?不是'B'一個正方形嗎? – maxymoo
我的意思是'B'副本的中心將在包裝好的六邊形的角落分佈在'A'上,而不是'B'本身是六角形的。我猜最容易處理的變體是'B'的尺寸小於六邊形的尺寸,因此副本之間沒有重疊。 – jez
我想如果你必須使用'strides'中的視圖,你可以將cols和rows添加到'A'中,然後索引它,當然內存允許。創建填充版本:'A1 = np.column_stack((A,A [:,:.shape [1] -1]))','A2 = np.row_stack((A1,A1 [:B.shape [0] -1]))'。 – Divakar