Уведомления

Группа в Telegram: @pythonsu

#1 Март 12, 2015 17:00:14

Pyuoo
Зарегистрирован: 2015-03-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Numpy массив не заполняется полностью [решено]

Привет! Подскажите в чем проблема с numpy массивом, список например заполняется:

import numpy as np
r = np.array([[1,1],[1,1],[1,1]])
w = 2
h = 3
mask = [[False] * w] * h
dx = [1,0,1,0,1,-1,1,-1]
dy = [0,1,0,-1,1,1,-1,-1]
def dfs(x,y):
    mask[x][y] = True
    r[x][y] = 42
    res = 0
    for j in range(len(dx)):
        nx = x + dx[j]
        ny = y + dy[j]
        if 0 <= nx < h and 0 <= ny < w and mask[nx][ny] == False: # and opening[nx][ny] == 255
            res += dfs(nx,ny) + 1
    return res
print r,mask
dfs(0,0)
print r,mask
[[1 1]
 [1 1]
 [1 1]] [[False, False], [False, False], [False, False]]
[[42 42]
 [ 1  1]
 [ 1  1]] [[True, True], [True, True], [True, True]]

Как видно заполняется только первая строка, в списках заполяется вся таблица.

Отредактировано Pyuoo (Март 13, 2015 09:52:36)

Офлайн

#2 Март 13, 2015 02:26:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Numpy массив не заполняется полностью [решено]

Pyuoo
mask = [[False] * w] * h
Это распространённая новичковая ошибка.
>>> lst = [[False] * 2] * 3
>>> lst
[[False, False], [False, False], [False, False]]
>>> lst[0][0] = 1
>>> lst
[[1, False], [1, False], [1, False]]
>>>



Офлайн

#3 Март 13, 2015 09:40:22

Pyuoo
Зарегистрирован: 2015-03-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Numpy массив не заполняется полностью [решено]

py.user.next
Понял, большое спасибо, то есть вся проблема в том, что эти ячейки ссылались на один объект
А как создавать списки списков из разных объектов?
Так слишком длинно выглядит:
mask = [[False for i in range(2)] for j in range(3)]

Отредактировано Pyuoo (Март 13, 2015 09:51:06)

Офлайн

#4 Март 13, 2015 10:21:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Numpy массив не заполняется полностью [решено]

Pyuoo
А как создавать списки списков из разных объектов?
>>> lst = [[False] * 2 for _ in range(3)]
>>> lst
[[False, False], [False, False], [False, False]]
>>> lst[0][0] = 1
>>> lst
[[1, False], [False, False], [False, False]]
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version