Привет, я пишу программу 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]