numPy Обход массива -- пример кода
Primary tabs
Для обхода матриц любой размерности в numpy можно использовать функцию -- многомерный индексовый итератор np.ndenumerate(), предоставляющий пару:
- набор координат (кортеж)
- и значение элемента матрицы
рассмотрим пример:
>>> a = np.array([[1, 2], [3, 4]]) >>> for index, x in np.ndenumerate(a): ... print index, x (0, 0) 1 (0, 1) 2 (1, 0) 3 (1, 1) 4
Пример обхода двумерной матрицы, self.mtx, и превращения её в симметричную:
for (i,j), matrixElement in np.ndenumerate(self.mtx): # сразу по строкам и столбцам if j > i: # если это половина над главной диагональю self.mtx[j, i] = matrixElement
В этом примере вы сразу можем использовать координаты элементов как переменные i и j -- у нас
Как не надо делать
Предположим, что у вас двумерная матрица, вместо обхода строк, а затем столбцов (кстати во втором случае enumerate будет вести себя по разному для разных типов числе -- для целых одни образом, а для комплексных --другим):
for (i, matrixRow) in enumerate(self.mtx): # "по строкам" print ('строка:', matrixRow, 'i=', i) for (j, matrixElement) in enumerate(matrixRow): # "по столбцам" print ('matrixElement:', matrixElement, 'j=', j) if j > i: # если это половина над глf=авной диагональю self.mtx[j, i] = matrixElement print(matrixElement)
следует использовать способ, аналогичный тому, что приведён в начале этой заметки.
Источники:
- numpy.ndenumerate: https://docs.scipy.org/doc/numpy-1.10.0/...
- Log in to post comments
- 6498 reads