#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. Извините, я ввел ошибку при запуске вашего ответа. Это действительно работает отлично.