Понимание синтаксиса нарезки в Numpy? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть размерная матрица x в Numpy.В этом примере я буду использовать массив 2x2.

np.array([[2, 2], [3,3]])

Как бы я чередовал добавление строки и столбца некоторого значения, чтобы результат выглядел так:

array([[2, x, 3, x],
       [x, x, x, x].
       [2, x, 3, x],
       [x, x, x, x]])

Этот ответ дает полезное начало, говоря, чтобы установить строки в целевой матрице правильного размера b из матрицы a, например, a[::2] = b, но что делает ::2 в синтаксисе среза и какя могу заставить его работать на столбцах?

Короче говоря, что параметры x y и z делают в следующем: a[x:y:z]?

1 Ответ

0 голосов
/ 10 февраля 2019

Если я правильно понимаю, что вы хотите, это должно работать:

import numpy as np
a = np.array([[2,2],[3,3]])
b = np.zeros((len(a)*2,len(a)*2))
b[::2,::2]=a

Это 'вставляет' значения из вашего массива (здесь он называется a) в каждую 2-ю строку и каждый 2-й столбец

Редактировать: надеюсь, что это дополнение поможет, основываясь на ваших последних изменениях:

x:y:z означает, что вы начинаете с элемента x и идете до y (не включая * 1012)* сам), используя z в качестве шага (например, 2, то есть каждые 2 элемента, так что x, x+2, x+4 и т. д. до x+2n, что является ближайшим к y возможным), поэтому::z будет означать ВСЕ элементы с шагом z (или ::2 для каждого второго элемента, начиная с 0)

Вы делаете это для каждого «измерения» вашего массива, поэтому для 2d выу вас будет [::z1,::z2] для просмотра всех ваших данных, с z1 для строк и z2 для столбцов.

Если это все еще неясно, укажите, что неясно в комментарии.

Одно последнее уточнение - когда вы печатаете только :, вы неявно сообщаете python 0:len(array) иame относится к ::z, что означает 0:len(array):z.и если вы просто наберете ::, это будет означать то же самое, что и : (хотя я не углубился в этот конкретный пример)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...