Python: добавление измерений в двумерный массив - PullRequest
1 голос
/ 02 февраля 2011

Предположим, у вас есть массив (m, m) и вы хотите его создать (n, n). Например, преобразование матрицы 2х2 в 6х6. Итак:

[[ 1.  2.]
 [ 3.  4.]]

Кому:

[[ 1.  2.  0.  0.  0.  0.]
 [ 3.  4.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]]

Вот что я делаю:

def array_append(old_array, new_shape):
    old_shape = old_array.shape
    dif = np.array(new_shape) - np.array(old_array.shape)
    rows = []
    for i in xrange(dif[0]):
        rows.append(np.zeros((old_array.shape[0])).tolist())
    new_array = np.append(old_array, rows, axis=0)
    columns = []
    for i in xrange(len(new_array)):
        columns.append(np.zeros(dif[1]).tolist())
    return np.append(new_array, columns, axis=1)

Пример использования:

test1 = np.ones((2,2))
test2 = np.zeros((6,6))
print array_append(test1, test2.shape)

Выход:

[[ 1.  1.  0.  0.  0.  0.]
 [ 1.  1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]]

На основании этого ответа. Но это много кода для (imho) простой операции. Есть ли более лаконичный / питонский способ сделать это?

Ответы [ 2 ]

3 голосов
/ 02 февраля 2011

Почему бы не использовать array = numpy.zeros((6,6)), см. numpy docs ...

РЕДАКТИРОВАТЬ, woops, вопрос был отредактирован ... Я думаю, вы пытаетесь поместить их в раздел массива, заполненный нулями? Тогда:

array = numpy.zeros((6,6))
array[0:2,0:2] = 1

Если малая матрица не все имеет значение 1:

array[ystart:yend,xstart:xend] = smallermatrix
1 голос
/ 02 февраля 2011

Это было бы тогда:

# test1= np.ones((2, 2))
test1= np.random.randn((2, 2))
test2= np.zeros((6, 6))
test2[0: 2, 0: 2]= test1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...