numPy Обход массива -- пример кода

Для обхода матриц любой размерности в 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)

следует использовать способ, аналогичный тому, что приведён в начале этой заметки.

Источники: