Добавление элемента в массив np и затем быстрая сортировка? Или найти способ вставить его на место, python и массивы np - PullRequest
0 голосов
/ 14 февраля 2020

Привет, я пишу программу AI, которая выполняет DFS дерева решений. У меня есть фактическая часть построения дерева, теперь я просто пытаюсь найти лучшее решение для построения массива, который содержит мои посещенные узлы, чтобы помочь ускорить процесс как DFS для проблемы, которую я пытаюсь решить. решить может занять огромное количество времени.

В настоящее время у меня есть состояние для каждой из моих позиций, которое содержит 5 различных переменных, 4 из которых - позиции, а пятый - какой-то другой элемент, за которым я слежу. Я создаю массив Nx5 np, который будет содержать все мои состояния, которые я уже посетил. Я буду использовать массив для проверки того, что текущее состояние моего дерева в моем дереве уже посещено. Я хочу, чтобы это было как можно более эффективным, и поэтому я искал несколько способов решить эту проблему. Можно было бы просто добавить текущее состояние к этому массиву и затем запустить быструю сортировку, хотя это кажется немного чрезмерным.

Я должен также упомянуть, что я пытаюсь отсортировать по 1-му элементу в 5 переменных, это координата x для одной из моих фигур на доске. Поэтому я хочу, чтобы мой первый столбец, столбец Nx1, был отсортирован. Я чувствую, что было бы легче просто вставить в список в отсортированную позицию, поэтому, если мое значение x равно 4, оно будет go через отсортированный массив, пока не достигнет места, где массив содержит значения 4, а затем просто вставьте его туда, поскольку это будет линейный алгоритм времени.

Мой вопрос: как бы я реализовал вставку такого типа в numpy? Функция вставки позволяет вставлять в указанный индекс c, но что если я не знаю индекса, с которого в этом случае начинаются 4 в первом столбце моего массива? Есть ли способ найти это в numpy?

В основном, как мне найти индекс первого элемента в первом столбце, который содержит значение x в двумерном массиве np.

Редактировать: я обнаружил, что строка в приведенном ниже коде вернется строка, которая сначала содержит мое значение x, но теперь мне просто нужно выяснить, как вставить этот индекс, я не совсем уверен, как найти индекс этой строки.

#Holds the stack of the states I'm in
myStack
#Holds all of the list of the visited states so far
visited
#Is the current state that we are in of the board
state

#I have found that this will return the first instance of a row where the number I'm looking for is at

array = visited[np.where(visited[:, 0] == x)][0]

#If I try to run this line it doesn't return the index even though I thought it would, instead it gives me some weird tuple like this
#(array([0, 1, 1, 1, 1, 1, 2, 2, 4], dtype=int32), array([0, 0, 1, 2, 3, 4, 2, 3, 0], dtype=int32))
index = np.where(visited = array)
if state in visited[:, 0]:
    skip over this iteration

Я думаю, что в итоге я напишу свою собственную функцию, которая проходит по строкам массива и возвращает индекс первой из них, совпадающей с array = посещения [np.where (посещение [:, 0] == x) ] [0]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...