Расширить размеры массива numpy до заданной формы - PullRequest
2 голосов
/ 08 мая 2020

Есть ли способ изменить форму массива в определенную форму, добавив недостающие размеры?

Допустим, у нас есть массив x

x = np.arange(10) 

Теперь мы хотим изменить его форму на (1, 1, 1, 10, 1). Мы можем сделать:

x = x.reshape((1, 1, 1, 10, 1)) 

или

x = x[None, None, None, x.shape[0], None]

Но если количество и положение размеров отступа меняются, это становится довольно неудобно. Есть способ лучше?

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Вы можете построить новую фигуру программно:

pre_pad, post_pad = 5,2
new_shape = tuple([1]*pre_pad) + x.shape + tuple([1]*post_pad)

y = x.reshape(new_shape)

print(y.shape)
# (1, 1, 1, 1, 1, 10, 1, 1)
1 голос
/ 08 мая 2020

Вы можете использовать np.pad, что дает вам большой контроль:

x = np.arange(10)

new_shape = np.pad([x.shape[0]],       # the thing to pad, in this case, [10]
                   (3,1),              # padding on (left, right)
                   'constant',    
                   constant_values=1)  # could specify L/R instead, e.g. (2,3)

y = x.reshape(new_shape)
y.shape
# (1, 1, 1, 10, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...