Как найти ближайшие значения в списке трехмерных массивов, используя numpy? - PullRequest
1 голос
/ 09 мая 2020

Предположим, у меня есть переменная arr, которая хранит несколько 3D-массивов.

arr = [[[1,2,3],
       [4,5,6],
       [10,11,12]]]

      [[[13,14,15],
        [16,17,18],
        [19,20,21]]]

Как я могу получить ближайшие значения к соответствующим заданным значениям в переменной vals из arr. Ближайшее значение для первого значения в vals следует искать только в 1-м массиве arr и точно так же во втором массиве

vals = np.array([3.2, 6.8])

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

nearest values = [3, 13]

1 Ответ

1 голос
/ 09 мая 2020

Учитывая, что ваши значения не связаны ни в каком порядке, мы можем сгладить массив для достижения желаемого результата:

import numpy as np

arr = np.array([[[1,2,3], [4,5,6], [10,11,12]],
                [[1,2,3], [4,5,6], [7,8,9]]])

vals = np.array([3.2, 6.8])

[arr.ravel()[np.argmin(np.abs(arr.ravel()-v))] for v in vals]
>>> [3, 7]

EDIT

Вы можете l oop для каждого среза в массиве для индивидуальной проверки среза:

[a.ravel()[np.argmin(np.abs(a.ravel()-vals[i]))] for i, a in enumerate(arr)]
>>> [3, 13]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...