2011-08-18 15 views
14

Ho un piccolo "blocco" di array NXN che voglio collegare a una regione specifica (cioè una regione diagonale in "start") di un "muro" di array di grandi dimensioni. C'è un metodo efficiente per archiviare questo?Come "incorporare" una piccola matrice numpy in un blocco predefinito di un grande array numpy?

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

attualmente quello che sto facendo è semplicemente:

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

risposta

24

è possibile utilizzare più indice di dimensione:

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 

l'output è:

>>> 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

Grazie! Mi ci sono voluti 2 minuti per individuare la differenza tra la tua versione giusta e la mia ingenua .. ;-) – nye17

Problemi correlati