Найти - Пользователи
Полная версия: Numpy массив не заполняется полностью [решено]
Начало » Python для новичков » Numpy массив не заполняется полностью [решено]
1
Pyuoo
Привет! Подскажите в чем проблема с 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]]

Как видно заполняется только первая строка, в списках заполяется вся таблица.
py.user.next
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]]
>>>
Pyuoo
py.user.next
Понял, большое спасибо, то есть вся проблема в том, что эти ячейки ссылались на один объект
А как создавать списки списков из разных объектов?
Так слишком длинно выглядит:
mask = [[False for i in range(2)] for j in range(3)]
py.user.next
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]]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB