Выявление индексов столбцов, из которых получен поднаборный массив np в большем массиве np - PullRequest
0 голосов
/ 01 июня 2018

У меня есть «большой» массив numpy, как показано ниже:

from numpy import array
large = array([[-0.047391  , -0.10926778, -0.00899118,  0.07461428, -0.07667476,
         0.06961918,  0.09440736,  0.01648382, -0.04102225, -0.05038805,
        -0.00930337,  0.3667651 , -0.02803499,  0.02597451, -0.1218804 ,
         0.00561949],
       [-0.00253788, -0.08670117, -0.00466262,  0.07330351, -0.06403728,
         0.00301005,  0.12807456,  0.01198117, -0.04290793, -0.06138136,
        -0.01369276,  0.37094407, -0.03747804,  0.04444246, -0.01162705,
         0.00554793]])

И «маленький» массив, который был подмножеством из large.

small = array([[-0.10926778, -0.07667476,  0.09440736],
       [-0.08670117, -0.06403728,  0.12807456]])

Без какой-либо другой информации, как мы можем идентифицировать индексы столбцов в large, из которых был сгенерирован массив small?

В этом случае ответ равен 1,4, 6 (начиная с 0, как это сделано в python).

Каков будет обобщенный способ определить это?

1 Ответ

0 голосов
/ 01 июня 2018

Примерно так (не знаете, как вы хотите сжать результат с 2D до 1D?):

>>> np.isin(large,small)
array([[False,  True, False, False,  True, False,  True, False, False,
        False, False, False, False, False, False, False],
       [False,  True, False, False,  True, False,  True, False, False,
        False, False, False, False, False, False, False]], dtype=bool)

>>> np.where(np.isin(large,small)) # tuple of arrays
(array([0, 0, 0, 1, 1, 1]), array([1, 4, 6, 1, 4, 6]))

# And generalizing, if you really want that as 2x2x3 array of indices:
idxs = array(np.where(np.isin(large,small)))
idxs.reshape( (2,) + small.shape )

array([[[0, 0, 0],
        [1, 1, 1]],

       [[1, 4, 6],
        [1, 4, 6]]])
...