Предполагается, что ваш 2D-массив хранится в обычном C-порядке (то есть каждая строка считается массивом или списком в основном массиве; другими словами, в мажорном порядке строки), или что вы предварительно транспонируете массив в противном случае , вы могли бы сделать что-то вроде ...
>>> import numpy as np
>>> a = np.array([[1, 2, 3], [2, 3, 4], [1, 2, 3], [3, 4, 5]])
>>> a
array([[1, 2, 3],
[2, 3, 4],
[1, 2, 3],
[3, 4, 5]])
>>> np.array([np.array(x) for x in set(tuple(x) for x in a)]) # or "list(x) for x in set[...]"
array([[3, 4, 5],
[2, 3, 4],
[1, 2, 3]])
Конечно, это не сработает, если вам нужны уникальные строки в их первоначальном порядке.
<ч />
Кстати, чтобы эмулировать что-то вроде unique(a, 'columns')
, вы просто транспонировали исходный массив, делали шаг, показанный выше, а затем транспонировали обратно.