Если ваши NumPy массивы не меняют адреса памяти, вы можете создать ключ на основе указателей на их адрес памяти. Обратите внимание, что это применимо только в том случае, если массив нужно изменить на месте:
>>> import numpy as np
>>> arr = np.arange(3)
>>> arr
array([0, 1, 2])
>>> ptr, _ = arr.__array_interface__['data']
>>> ptr
140556718588416
>>> dct = {ptr: arr}
>>> dct[ptr]
array([0, 1, 2])
>>> arr += 10
>>> dct[ptr]
array([10, 11, 12])
>>> arr[...] = 0
>>> dct[ptr]
array([0, 0, 0])
Но если вы на самом деле измените расположение памяти в массиве, вы столкнетесь с ошибками:
>>> arr = np.ones_like(arr)
>>> arr
array([1, 1, 1])
>>> dct[ptr] # oops!
array([0, 0, 0])