Перебор массива в Python. Использование NumPy для перебора массива | OTUS

Перебор массива в Python. Использование NumPy для перебора массива

В этой статье поговорим о способах перебора массива в Python. Для выполнения этой задачи воспользуемся возможностями, которые предоставляет библиотека NumPy.

NumPy — библиотека для языка программирования Python с открытым исходным кодом. В пакете NumPy содержится объект итератора numpy.nditer. Речь идёт об эффективном многомерном объекте-итераторе, посредством которого вы сможете осуществлять итерации по массиву, то есть выполнять перебор массива в Питоне. При этом каждый элемент массива "посещается" с применением стандартного интерфейса Python-итератора.

Чтобы продемонстрировать возможности этого метода, создадим массив размером 3 х 4, используя функцию arange (). После выполним перебор массива (итерацию по нему) посредством nditer .

Пример № 1

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)

print 'Original array is:'
print a
print '\n'

print 'Modified array is:'
for x in np.nditer(a):
   print x,

В итоге получим следующий вывод:

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Modified array is:
0 5 10 15 20 25 30 35 40 45 50 55

Пример № 2

Здесь порядок итерации (перебора) массива подбирается таким образом, дабы соответствовать макету памяти массива, не учитывая конкретный порядок. Вы можете в этом убедиться, реализовав перебор по транспонированному массиву.

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'Original array is:'
print a 
print '\n'  

print 'Transpose of the original array is:' 
b = a.T 
print b 
print '\n'  

print 'Modified array is:' 
for x in np.nditer(b): 
   print x,

В итоге получим следующий результат:

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Transpose of the original array is:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]

Modified array is:
0 5 10 15 20 25 30 35 40 45 50 55

Порядок перебора массива в Python

Когда одни и те же элементы сохраняются в порядке F-стиля, итератор подбирает наиболее эффективный способ перебора Python-массива.

Пример № 1

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'

print 'Transpose of the original array is:'
b = a.T
print b
print '\n'

print 'Sorted in C-style order:'
c = b.copy(order = 'C')
print c
for x in np.nditer(c):
   print x,

print '\n'

print 'Sorted in F-style order:'
c = b.copy(order = 'F')
print c
for x in np.nditer(c):
   print x,

В итоге получим следующий вывод::

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Transpose of the original array is:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]

Sorted in C-style order:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]
0 20 40 5 25 45 10 30 50 15 35 55

Sorted in F-style order:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]
0 5 10 15 20 25 30 35 40 45 50 55

Пример № 2

Кроме того, мы можем заставить объект nditer применять определенный порядок, если явно упомянем его.

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'Original array is:' 
print a 
print '\n'  

print 'Sorted in C-style order:' 
for x in np.nditer(a, order = 'C'): 
   print x,  
print '\n' 

print 'Sorted in F-style order:' 
for x in np.nditer(a, order = 'F'): 
   print x,

В итоге получим следующий вывод:

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Sorted in C-style order:
0 5 10 15 20 25 30 35 40 45 50 55

Sorted in F-style order:
0 20 40 5 25 45 10 30 50 15 35 55

Вот и всё. Помните, что повысить свою компетенцию в области Python-разработки вы всегда можете на наших курсах:

Источник

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто