У меня есть следующий массив 3 x 3 x 3 с именем a
(комментарии будут иметь смысл после прочтения остальной части вопроса):
array([[[8, 1, 0], # irrelevant 1 (is at position 1 rather than 0)
[1, 7, 5], # the 1 on this line is what I am after!
[1, 4, 9]], # irrelevant 1 (out of the "cross")
[[4, 0, 1], # irrelevant 1 (is at position 2 rather than 0)
[1, 0, 1], # I'm only after the first 1 on this line!
[6, 2, 1]], # irrelevant 1 (is at position 2 rather than 0)
[[0, 2, 2],
[0, 6, 7],
[3, 4, 9]]])
, кроме того, у меня есть этот список индексовэто относится к «центральному кресту» указанной матрицы, называемому idx
[array([0, 1, 1, 1, 2]), array([1, 0, 1, 2, 1])]
РЕДАКТИРОВАТЬ: я называю это «крест», поскольку он отмечает центральный столбец и строку в следующем:
>>> a[..., 0]
array([[8, 1, 1],
[4, 1, 6],
[0, 0, 3]])
Я хотел бы получить индексы всех этих массивов, расположенных в idx
, первое значение которых равно 1 , но я изо всех сил пытаюсь понять, как использовать numpy.where()
в правомпуть.Поскольку ...
>>> a[..., 0][idx]
array([1, 4, 1, 6, 0])
... Я пытался ...
>>> np.where(a[..., 0][idx] == 1)
(array([0, 2]),)
... но, как вы можете видеть, он возвращает индекс нарезанного массива, а не a
, в то время как я хотел бы получить:
[array([0, 1]), array([1, 1])] #as a[0, 1, 0] and a [1, 1, 0] are equal to 1.
Заранее благодарю за помощь!
PS: В комментариях мне предложили попытаться дать более широкий сценарийприменимость.Хотя это не то, для чего я использую, я предполагаю, что это можно использовать для обработки изображений, как это делают многие 2D-библиотеки, с исходным слоем, целевым слоем и маской (см., Например, cairo ).В этом случае маска будет массивом idx
, и можно будет представить работу с каналом R цветов RGB (a[..., 0]
).