Какой самый короткий код, чтобы повторить numpy array([x,y,z]) и сделать array([[x,y,z], [x,y,z], [x,y,z], ...]), чтобы получился код, как показано ниже:

import numpy as np
p = np.array([1, 2, 3])
n = 10
p_n = np.tile(p, n).reshape(n, 3)

Вывод кода:

array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])
1
maech 15 Ноя 2020 в 06:40

4 ответа

Лучший ответ

Ваш код работает очень хорошо. Я не вижу смысла сокращать несколько символов.

Тем не менее, вот более короткий вариант (несколько символов)

p_n = np.vstack([p]*n)

Примечание : избегайте from numpy import *. В Numpy слишком много вещей, и это может нарушить некоторые функции Python по умолчанию (например, bool)

2
Quang Hoang 15 Ноя 2020 в 03:51

Вы также можете использовать np.repeat, например

np.repeat(np.arange(3)[None,:],4,axis=0)
1
meTchaikovsky 15 Ноя 2020 в 04:16

Если у вас уже есть подготовленный массив, в котором хранятся повторяющиеся координаты, то этого достаточно:

p_n[:] = p

Будет полезно назначить p_n несколько раз.

2
amzon-ex 15 Ноя 2020 в 05:03

Для данного массива p и числа масштабирования n самый короткий из них был бы (без какой-либо функции, помогающей сделать его коротким) -

p_n = p+[[0]]*n

Пробный прогон -

In [17]: p+[[0]]*n
Out[17]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])
1
Divakar 15 Ноя 2020 в 06:23