Дублирование вектора по произвольному числу измерений

#python #numpy

#python #numpy

Вопрос:

Я хочу повторить a 1D-array по измерениям другого массива, зная, что это количество измерений может измениться.

Например:

 import numpy as np
to_repeat = np.linspace(0, 100, 10)
base_array = np.random.random((24, 60)) ## this one can have more than two dimensions.

final_array = np.array([[to_repeat for i in range(base_array.shape[0])] for j in range(base_array.shape[1])]).T
print(final_array.shape)
# >>> (10, 24, 60)
  

Как это можно распространить на массив base_array с произвольным числом измерений?
Возможно, используя numpy векторизованные функции, чтобы избежать циклов?


РЕДАКТИРОВАТЬ (увеличенное изображение):

base_array на самом деле имеет форму (10, 24, 60) (если мы придерживаемся этого примера), где координаты вдоль первого измерения являются вектором to_repeat .

Я ищу минимум по первому измерению base_array и создаю массив соответствующих координат, здесь формы (24, 60) .

Комментарии:

1. Для чего вы это используете? Потому что вы почти наверняка хотите транслировать to_repeat , а не создавать final_array .

2. Смотрите мой отредактированный вопрос!

Ответ №1:

Вам не нужно final_array , вы можете получить желаемый результат с помощью:

 to_repeat[base_array.argmin(0)]
  

Комментарии:

1. Это возвращает Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: index 18 is out of bounds for axis 0 with size 10

2. Вам необходимо предоставить исполняемый код, который четко показывает ваши входные формы и ожидаемый результат. Если base_array.shape = (10, 24, 60) , как вы говорите, argmin(0) не должно возвращать 18.

3. Извините, я ввел ошибку при запуске вашего ответа. Это действительно работает отлично.