Ejercicio: 3Eva2010TII_T1 Matriz con aleatorios no repetidos (desordena)
Números naturales aleatorios entre 0 y n2-1

# entero aleatorio [0,n**2), no incluye n**2
intervalo = n**2
numero = int(rnd.random()*intervalo)+0
Para llevar el control de números aleatorios no repetidos se usa una lista. El sorteo se repite si el número se encuentra ya en la lista.
usados = []
# numero no repetido
while numero in usados:
numero = int(rnd.random()*intervalo)+0
Validado que no es repetido se puede almacenar en la lista de usados y en la posición de una matriz.
matriz = -1*np.ones(shape=(n,n), dtype=int)
matriz[fila,columna] = numero
usados.append(numero)

Algoritmo en Python
Integrando las partes en un algoritmo, usando contadores para fila y columna de la matriz, se obtiene:
# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)
# Propuesta: edelros@espol.edu.ec
# Tarea: integrar con tema 3
import numpy as np
import random as rnd
def desordena(n):
matriz = -1*np.ones(shape=(n,n), dtype=int)
usados = []
# entero aleatorio [0,n**2), no incluye n**2
intervalo = n**2
fila = 0
while not(fila>=n):
columna = 0
while not(columna>=n):
# numero no repetido
numero = int(rnd.random()*intervalo)+0
while numero in usados:
numero = int(rnd.random()*intervalo)+0
matriz[fila,columna] = numero
usados.append(numero)
columna = columna + 1
fila = fila + 1
return(matriz)
resultado del algoritmo:
>>> desordena(3)
array([[0, 7, 2],
[6, 5, 8],
[4, 1, 3]])
>>> desordena(3)
array([[7, 3, 6],
[8, 1, 0],
[5, 2, 4]])
>>>