Итерация по numpy.ndarray вдоль оси - PullRequest
0 голосов
/ 30 декабря 2018

Предположим, у меня есть 3D-массив arr.Я хочу перебрать arr таким образом, чтобы каждая итерация давала вектор вдоль z-axis.Это можно сделать, но решение не обобщено.Если arr.shape и ось, вдоль которой должны быть получены векторы, неизвестны или не являются переменными, то, похоже, прямого пути для этого нет.Кто-нибудь может предложить решение этой проблемы?

for line in np.nditer(arr, axis=2):
    # Perform operation on line


arr = array(
      [[[2, 2, 8, 8],
        [6, 2, 1, 5],
        [4, 5, 1, 4]],

       [[7, 4, 7, 4],
        [0, 0, 3, 3],
        [7, 6, 8, 0]]]
)

Ожидаемый результат:

[2 2 8 8]
[6 2 1 5]
[4 5 1 4]
[7 4 7 4]
[0 0 3 3]
[7 6 8 0]

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Запись предложений @ hpaulj в ответ.

moveaxis кажется правильным ответом.Однако apply_along_axis интуитивно понятен и очень прост в использовании.

0 голосов
/ 30 декабря 2018

В numpy массивах shape предоставляет вам информацию о # dimensions и # elements в каждом из измерений.с вашим кодом мы получим,

print(arr.shape)
# (2,3,4)
# 3-D array
#   along x-axis = 2 elements each
#   along y-axis = 3 elements each
#   along z-axis = 4 elements each

Итак, если я хочу посмотреть на элементы вдоль z-axis для всех x-axis и y-axis, это будет выглядеть как

for xid in range(arr.shape[0]):     # for each x-axis
    for yid in range(arr.shape[1]): # for each y-axis
        print(arr[xid, yid, :])     # All elements in z-axis    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...