Как я могу использовать уникальные (a, 'rows') из MATLAB в Python?

Я переводил некоторые вещи из MATLAB на язык Python.

В NumPy есть эта команда, уникальная (a). Но поскольку программа MATLAB также запускает команду «rows», она дает что-то немного другое.

Есть ли аналогичная команда в Python или я должен сделать какой-то алгоритм, который делает то же самое?

  • Временная серия Detrend Flux с нелинейным трендом
  • Самый быстрый способ загрузки числовых данных в массив python / pandas / numpy из MySQL
  • Numpy: преобразование массива в треугольную матрицу
  • Программирование на Python - numpy polyfit говорит NAN
  • Квадратичная программа (QP), которая зависит только от NumPy / SciPy?
  • Простое распознавание знаков OCR в OpenCV-Python
  • Строка Python для основного вектора заказа
  • когда я должен использовать hstack / vstack vs append vs concatenate vs column_stack
  • 2 Solutions collect form web for “Как я могу использовать уникальные (a, 'rows') из MATLAB в Python?”

    Предполагая, что ваш 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') , вы просто перенесите исходный массив, сделайте шаг, показанный выше, а затем переместите назад.

    Можешь попробовать:

     ii = 0; wrk_arr = your_arr idx = numpy.arange(0,len(wrk_arr)) while ii<=len(wrk_arr)-1: i_list = numpy.arange(0,len(wrk_arr) candidate = numpy.matrix(wrk_arr[ii,:]) i_dup = numpy.array([0] * len(wrk_arr)) numpy.all(candidate == wrk_arr,axis=1, iout = idup) idup[ii]=0 i_list = numpy.unique(i_list * (1-idup)) idx = numpy.unique(idx * (1-idup)) wrk_arr = wrk_arr[i_list,:] ii += 1 

    Результатом является wrk_arr, который является уникальным отсортированным массивом your_arr. Это соотношение:

     your_arr[idx,:] = wrk_arr 

    Он работает как MATLAB в том смысле, что возвращаемый массив (wrk_arr) сохраняет порядок исходного массива (your_arr). Массив idx отличается от MATLAB, поскольку он содержит индексы первого появления, тогда как MATLAB возвращает вид LAST.

    По моему опыту он работал так же быстро, как MATLAB на матрице 10000 X 4.

    И транспонирование сделает трюк для случая столбца.

    Python - лучший язык программирования в мире.