Построить массив 3-х измерений из массива двух измерений с использованием плитки - PullRequest
1 голос
/ 10 апреля 2019

У меня есть массив arr = np.array([0.0, 0.0, 1.0])

Я хочу сжать массив следующей формы promo_class.shape, что составляет (2,3,3)

Я хочу создать повторный массив формы (2,3,3)

array([[[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]],
       [[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]]])

Есть идеи, как это сделать с помощью функции np.tile?

1 Ответ

1 голос
/ 10 апреля 2019

Просто используйте np.broadcast_to для view -

In [142]: arr = np.array([0.0, 0.0, 1.0])

In [144]: np.broadcast_to(arr,(2,3,3))
Out[144]: 
array([[[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]],

       [[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]]])

Почему мы должны использовать view?

Поскольку он является представлением, он не имеет дополнительной памяти и, следовательно, практически свободен во время выполнения -

In [148]: arr = np.random.rand(300)

In [149]: %timeit np.broadcast_to(arr,(200,300,300))
100000 loops, best of 3: 3.13 µs per loop

Если вам нужен выход с собственным пространством памяти, добавьте .copy().


Если вы посвящены np.tile -

In [174]: np.tile(arr,(2,3,1))
Out[174]: 
array([[[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]],

       [[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...