#python #arrays #numpy
Вопрос:
Например. У меня есть 2D массив:
1 2 3
4 5 6
7 8 9
И я хочу, чтобы это стало:
1 1 2 3 3
1 1 2 3 3
4 4 5 6 6
7 7 8 9 9
7 7 8 9 9
А затем повторяйте этот процесс до тех пор, пока размер 2D-массива не станет 9×9.
Спасибо!
Комментарии:
1. Попробуйте
np.pad()
сedge
режимом.2. @MarkSetchell Это работает, спасибо!
Ответ №1:
Вы ищете repeat
функцию numpy :
initial_array = np.arange(1, 10).reshape((3,3))
desired_shape = (9, 9)
number_of_repeat_axis0 = desired_shape[0] // initial_array.shape[0]
number_of_repeat_axis1 = desired_shape[1] // initial_array.shape[1]
tmp = np.repeat(initial_array , number_of_repeat_axis0, axis = 0)
output = np.repeat(tmp, number_of_repeat_axis1, axis = 1)
'''
returns :
[[1 1 1 2 2 2 3 3 3]
[1 1 1 2 2 2 3 3 3]
[1 1 1 2 2 2 3 3 3]
[4 4 4 5 5 5 6 6 6]
[4 4 4 5 5 5 6 6 6]
[4 4 4 5 5 5 6 6 6]
[7 7 7 8 8 8 9 9 9]
[7 7 7 8 8 8 9 9 9]
[7 7 7 8 8 8 9 9 9]]
'''
Но это повторит все ваши данные, включая данные в середине вашего массива. Если вы хотите, чтобы повторялись только экстремальные значения, просто измените их на :
tmp = np.repeat(initial_array , [4,1,4], axis = 0)
output = np.repeat(tmp, [4,1,4], axis = 1)
'''
returns :
[[1 1 1 1 2 3 3 3 3]
[1 1 1 1 2 3 3 3 3]
[1 1 1 1 2 3 3 3 3]
[1 1 1 1 2 3 3 3 3]
[4 4 4 4 5 6 6 6 6]
[7 7 7 7 8 9 9 9 9]
[7 7 7 7 8 9 9 9 9]
[7 7 7 7 8 9 9 9 9]
[7 7 7 7 8 9 9 9 9]]
'''
Комментарии:
1. Спасибо за ответ, но, похоже, это не соответствует моему вопросу. Я думаю, что код должен быть более сложным. Исходный массив 3×3 расположен в центре, и увеличьте его во всех направлениях.