python: numpy функция для расширения нескольких матриц - PullRequest
2 голосов
/ 18 января 2020

Предполагая, что у меня есть 3 numpy квадратные матрицы различной формы:

AxA
BxB
CxC

Существует ли функция numpy, которая бы расширяла матрицы до максимального размера и помещала некоторые значения по умолчанию в новые ячейки? Пример:

3x3
5x5
10x10

должно привести к 3 массивам 10x10.

1 Ответ

3 голосов
/ 18 января 2020

Пока вы хотите, чтобы исходные значения a и b были сохранены в «верхнем левом углу», вы могли бы go с инициализацией нового массива с вашим желаемым fill_value (скажем, 99) и поместите в него ваши меньшие массивы так:

import numpy as np

a = np.ones(shape=(3,3))
b = np.ones(shape=(5,5))
c = np.ones(shape=(10,10))

a2 = np.full(shape=(10,10), fill_value=99)
a2[:a.shape[0], :a.shape[1]] = a

b2 = np.full(shape=(10,10), fill_value=99)
b2[:b.shape[0], :b.shape[1]] = b

##

>> a2:
[[ 1  1  1 99 99 99 99 99 99 99]
 [ 1  1  1 99 99 99 99 99 99 99]
 [ 1  1  1 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]]

Редактировать:

Если вы хотите сделать это автоматически, без необходимости знать размер самого большого квадратного массива:

a = np.ones(shape=(3,3))
b = np.ones(shape=(5,5))
c = np.ones(shape=(10,10))

list_of_arrays = [a, b, c]
shapes = [arr.shape for arr in list_of_arrays]
max_shape = max(shapes)

for iarr, arr in enumerate(list_of_arrays):
    arr_new = np.full(shape=max_shape, fill_value=99)
    arr_new[:arr.shape[0], :arr.shape[1]] = arr
    list_of_arrays[iarr] = arr_new


>> print(list_of_arrays[1])
[[ 1  1  1  1  1 99 99 99 99 99]
 [ 1  1  1  1  1 99 99 99 99 99]
 [ 1  1  1  1  1 99 99 99 99 99]
 [ 1  1  1  1  1 99 99 99 99 99]
 [ 1  1  1  1  1 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]
 [99 99 99 99 99 99 99 99 99 99]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...