2011-08-18 15 views
14

Tôi có một khối NXN nhỏ "khối" mà tôi muốn cắm vào một khu vực cụ thể (tức là, một khu vực đường chéo tại "bắt đầu") của một mảng lớn "tường". Có một phương pháp hiệu quả để lưu trữ này?Làm thế nào để "nhúng" một mảng nhỏ gọn gàng vào một khối được xác định trước của một mảng numpy lớn?

wall[start:start+N][start:start+N] = block[:][:] 

hiện những gì tôi đang làm chỉ đơn giản là:

for i in xrange(N): 
    wall[start+i][start:start+N] = block[i][:] 

Trả lời

24

bạn có thể sử dụng chỉ số khía cạnh đa:

import numpy as np 

wall = np.zeros((10,10),dtype=np.int) 
block = np.arange(1,7).reshape(2,3) 

x = 2 
y = 3 
wall[x:x+block.shape[0], y:y+block.shape[1]] = block 

đầu ra là:

>>> wall 
array([[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, 0, 0, 0, 0], 
     [0, 0, 0, 4, 5, 6, 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, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) 
+0

Cảm ơn! Nó đã cho tôi 2 phút để phát hiện sự khác biệt giữa phiên bản quyền của bạn và một ngây thơ của tôi .. ;-) – nye17

Các vấn đề liên quan