Extrair parte triangular superior ou inferior de uma matriz numpy

Eu tenho uma matrizA e eu quero 2 matrizesU eL de tal modo queU contém os elementos triangulares superiores de A (todos os elementos acima e sem incluir a diagonal) e da mesma forma paraL (todos os elementos abaixo e não incluindo a diagonal). Tem algumanumpy método para fazer isso?

por exempl

A = array([[ 4.,  9., -3.],
           [ 2.,  4., -2.],
           [-2., -3.,  7.]])
U = array([[ 0.,  9., -3.],
           [ 0.,  0., -2.],
           [ 0.,  0.,  0.]])
L = array([[ 0.,  0.,  0.],
           [ 2.,  0.,  0.],
           [-2., -3.,  0.]])

questionAnswers(6)

yourAnswerToTheQuestion