Python (numpy или panda): Как увеличить размер 2D-массива, добавив значения из близких граничных значений?

#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 расположен в центре, и увеличьте его во всех направлениях.