Один лайнер для создания нескольких глубоких копий массива? - PullRequest
1 голос
/ 21 июня 2019

При инициализации моего кода мне нужно создать несколько пустых массивов одинаковой формы. Это просто сделать

>>> nx=10
>>> ny=10
>>> a = np.zeros((ny,nx))
>>> b = np.copy(a)
>>> c = np.copy(a)
>>> d = np.copy(a)
>>> etc.

но это, конечно, утомительно. Я надеялся, что для этого может быть одна строчка. Я пытался

>>> (b,c,d,e,f,g) = 6*[np.copy(a)]

но это дает мне несколько ссылок на a, а не независимых копий.

Есть ли что-то подобное, что даст независимые копии?

1 Ответ

1 голос
/ 21 июня 2019

Мы можем воспользоваться распаковкой кортежей здесь.Если вы создаете стандартный массив Numpy (нули, единицы, глаз и т. Д.), То вы можете сделать это, установив в качестве крайнего значения фигуры количество копий, которое вам нужно:

a, b, c, d, e, f, g = np.zeros((7, ny, nx))

Имейте в виду, что если вы создаете свои «копии» таким образом, они фактически все срезы в одном массиве.

Если вы действительно хотите делать копии определенного массива (а не работать с кусочкамиодин больший массив), вы должны распаковать выражение генератора вызовов в np.copy

# a is the numpy array to be copied
b, c, d, e, f, g = (np.copy(a) for _ in range(6))

. Убедитесь, что количество сделанных копий (6 или 7 в приведенных выше примерах) является точным.

...