Numpy: наложение логического массива на "True" другого логического массива - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть двумерный массив bool A с числами True, являющимися размером двумерного массива bool B.

A = np.array([[False, True, True, False, True],[False, False, False, False, False],[False, True, True, False, True]])
B = np.array([[True, False, True],[True, True, True]])

A =[[False, True,  True,  False, True],
    [False, False, False, False, False],
    [False, True,  True,  False, True]]
B =[[True, False, True],
    [True, False, True]]

Я хочу "наложить" B на массив "True" А, чтобы я получил

C =  
[[False, **True**,  **False**,  False, **True**],  
[False, False, False, False, False],  
[False, **True**,  **False**,  False, **True**]]  

Моя конечная цель - манипулировать массивом

arr = [[1, 2 , 3 , 4, 5 ], [6,7,8,9,10], [11, 12 , 13 , 14, 15 ]]

с чем-то вроде

arr[A] = arr[A] + B*2

, чтобы получить

обр = = [[1, 4 , 3 , 4, 7 ], [6,7,8,9,10], [11, 14 , 13 , 14, 17 ]]

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 февраля 2020
# get the indexes that are True
Xi = np.nonzero(A)

# convert to an array of 1D
B1 = np.ndarray.flatten(B)

# use Xi for dynamic indexing
A[Xi]=B1
0 голосов
/ 23 февраля 2020

Решение, которое я придумал, было (работает, только если B является квадратичным c):

arr[A] = (arr[A].reshape(len(B), len(B)) + 2 * B).ravel()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...