I need to insert a matrix inside another one using numpy
The matrix i need to insert is like this one:
tetraminos = [[0, 1, 0], [1, 1, 1]]
While the other matrix is like this:
board = numpy.array([ [6,0,0,0,0,0,0,0,0,0], [6,0,0,0,0,0,0,0,0,0] ])
The code i’m actually using this one:
board[0:0 + len(tetraminos), 0:0 + len(tetraminos[0])] = tetraminos
The problem matrix that i’m getting is this one:
wrong_matrix = numpy.array([ [[0,1,0,0,0,0,0,0,0,0], [1,1,1,0,0,0,0,0,0,0]] ])
while the expected result is:
expected_result = numpy.array([ [6,1,0,0,0,0,0,0,0,0], [1,1,1,0,0,0,0,0,0,0] ])
The error is that, since the matrix contains 0, when i insert it inside the new one i lost the first value in the first row (the number 6), while i wanted to keep it
Full code:
import numpy if __name__ == '__main__': board = numpy.array([ [6,0,0,0,0,0,0,0,0,0], [6,0,0,0,0,0,0,0,0,0] ]) tetraminos = [[0, 1, 0], [1, 1, 1]] board[0:0 + len(tetraminos), 0:0 + len(tetraminos[0])] = tetraminos print(board) expected_result = numpy.array([ [6,1,0,0,0,0,0,0,0,0], [1,1,1,0,0,0,0,0,0,0] ]) exit(1)
Advertisement
Answer
As long as you always want to put a constant value in there, you can treat your tetramino as a mask and use the np.putmask
function:
>>> board = np.array([[6,0,0,0,0,0,0,0,0],[6,0,0,0,0,0,0,0,0]]) >>> board array([[6, 0, 0, 0, 0, 0, 0, 0, 0], [6, 0, 0, 0, 0, 0, 0, 0, 0]]) >>> tetraminos = [[0,1,0],[1,1,1]] >>> np.putmask(board[0:len(tetraminos),0:len(tetraminos[0])], tetraminos,1) >>> board array([[6, 1, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0, 0]])