Вопрос бага Numpy в Python. Он превращает список двух размеров в один размер

Я встретил ошибку о numpy.

Вот мой код:

huge_may_go =  np.array(pd.DataFrame(columns=range(2)))
def add_may_go(x,y):
    global huge_may_go
    counter = 0
    for i in range(-2,3):
        print(huge_may_go)
        cur_y = y + i 
        if cur_y < 0 or cur_y >= board_order:
            continue
        for j in range(-2,3):
            cur_x = x+j
            if (i == 0 and j == 0) or cur_x < 0 or cur_x >= board_order or ([cur_y,cur_x] == huge_may_go).all(1).any():
                continue
            if not public_grid[cur_y][cur_x]:
                huge_may_go = np.append(huge_may_go,[[cur_y,cur_x]],axis=0)
                counter += 1
    return counter

Я не знаком с numpy. Раньше я использовал «список» python, чтобы заставить его работать.

Однако скорость списка Python невелика.

Один из моих друзей посоветовал мне попробовать numpy.

Однако я столкнулся с серьезной проблемой


Благодаря @Corralien. Я знаю, что мой код не является неправильным.

Наконец-то я знаю, какой код вызывает мою ошибку:

это строка рядом с ним:

huge_may_go = np.delete(huge_may_go,[[gy,gx]])

однако это приводит к другому вопросу. Почему это неправильно?

перед предложением огромный может идти:

    [[7 7]
 [7 8]
 [7 9]
 [7 10]
 [7 11]
 [8 7]
 [8 8]
 [8 9]
 [8 10]
 [8 11]
 [9 7]
 [9 10]
 [9 11]
 [10 7]
 [10 8]
 [10 9]
 [10 10]
 [10 11]
 [11 7]
 [11 8]
 [11 9]
 [11 10]
 [11 11]]

однако после этого стало:

[7 7 7 8 7 9 7 10 8 7 8 8 8 9 8 10 8 11 9 7 9 8 9 10 9 11 10 7 10 8 10 9 10 10 10 11 11 7 11 8 11 9 11 10 11 11]

Я хочу знать, почему

в этом коде gx = 8 и gy = 9


Благодаря Corralien в другой раз

однако, когда я запускаю его, [9,8] все еще находится в массиве "huge_may_go"

или способ удаления неправильный?

всем тоже спасибо


Умоляю тебя, помоги мне, пожалуйста.

Кроме того, если у вас есть идея увеличить скорость этого кода. Пожалуйста, скажите мне также.

Скорость - это самое главное, что меня волнует.

Вы также можете сказать мне, как улучшить скорость кода. Спасибо

У меня везде поиск по этому вопросу. Но мой поисковик ничего мне не говорит!

Кроме того, если у вас есть идея увеличить скорость этого кода. Пожалуйста, скажите мне также.

Скорость - это самое главное, что меня волнует.

Можете ли вы показать, как должен выглядеть вывод?

Ashyam 03.02.2023 07:48

Да, я уже отредактировал свой вопрос, и вы можете посмотреть на картинку, которую я публикую, чтобы найти более подробную информацию.

shunyi sui 03.02.2023 07:55

Что такое ввод для add_may_go? Откуда берутся эти цифры?

Ashyam 03.02.2023 07:58

это add_may_go(8,8)

shunyi sui 03.02.2023 07:58

Какой результат вы хотите?

Tachibana Shin 03.02.2023 07:59

x и y относятся к числу, в моем вводе x = 8 и y = 8

shunyi sui 03.02.2023 07:59

Истинный результат, который я хочу, - это огромный список, содержащий место, которое он сканирует, и счетчик, сообщающий мне, сколько мест я добавил.

shunyi sui 03.02.2023 08:02

я действительно не понимаю, было бы здорово, если бы вы добавили INPUT и OUTPUT к вопросу, это упрощает решение

Tachibana Shin 03.02.2023 08:03

Я уже отредактировал свой вопрос

shunyi sui 03.02.2023 08:09

Я не понимаю, что вы пытаетесь сделать с этой функцией?

Corralien 03.02.2023 08:25

Что эта функция пытается сделать, так это найти точку, в которую должен перейти ai. Я делаю ИИ на основе поиска а-б.

shunyi sui 03.02.2023 08:31

Пока я добавляю шаг, «huge_may_go» добавляет шаги и сообщает, сколько шагов он добавляет. Затем я удаляю их с конца, когда удаляю добавленный шаг.

shunyi sui 03.02.2023 08:33

Всем привет. Большое спасибо, однако это принесло мне еще один вопрос. Если вы хотите помочь мне. пожалуйста, просмотрите вопрос еще раз. Я отредактировал его снова. Всем большое спасибо!

shunyi sui 03.02.2023 09:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
13
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлять

Вам нужно изменить форму массива, потому что numpy.delete сгладить его:

huge_may_go = np.delete(huge_may_go,[[9,8]]).reshape(-1, 2)

Ваш код, кажется, отлично работает для меня:

huge_may_go =  np.array(pd.DataFrame(columns=range(2)))
border_order = 19
public_grid = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]] * 24

def add_may_go(x,y):
    global huge_may_go
    counter = 0
    for i in range(-2,3):
        print(huge_may_go)
        cur_y = y + i 
        if cur_y < 0 or cur_y >= board_order:
            continue
        for j in range(-2,3):
            cur_x = x+j
            if (i == 0 and j == 0) or cur_x < 0 or cur_x >= board_order or ([cur_y,cur_x] == huge_may_go).all(1).any():
                continue
            if not public_grid[cur_y][cur_x]:
                huge_may_go = np.append(huge_may_go,[[cur_y,cur_x]],axis=0)
                counter += 1
    return counter

add_may_go(8, 8)

Выход:

[]
[[6 6]
 [6 7]
 [6 8]
 [6 9]
 [6 10]]
[[6 6]
 [6 7]
 [6 8]
 [6 9]
 [6 10]
 [7 6]
 [7 7]
 [7 8]
 [7 9]
 [7 10]]
[[6 6]
 [6 7]
 [6 8]
 [6 9]
 [6 10]
 [7 6]
 [7 7]
 [7 8]
 [7 9]
 [7 10]
 [8 6]
 [8 7]
 [8 9]
 [8 10]]
[[6 6]
 [6 7]
 [6 8]
 [6 9]
 [6 10]
 [7 6]
 [7 7]
 [7 8]
 [7 9]
 [7 10]
 [8 6]
 [8 7]
 [8 9]
 [8 10]
 [9 6]
 [9 7]
 [9 8]
 [9 9]
 [9 10]]
24

??? Меня это шокировало!? Должно быть что-то не так с другой частью моей программы

shunyi sui 03.02.2023 08:32

Привет большое спасибо. Но это вызывает другой вопрос. Я отредактировал свой вопрос. Если хотите, не могли бы вы помочь мне снова?

shunyi sui 03.02.2023 09:13

Большое спасибо. однако кажется, что он не удалил ([8,9]) из "huge_may_go"

shunyi sui 03.02.2023 09:40

или я имею в виду [9,8] также

shunyi sui 03.02.2023 09:41

Он удаляет значения [6, 10], потому что в массиве есть 8-я и 9-я позиции.

Corralien 03.02.2023 09:46

Другие вопросы по теме