2016-04-04 2 views
-1

Например, у меня есть массив 300x600 numpy. Я хочу использовать лямбда карты для изменения на месте каждого значения в этом массиве с некоторыми условиями if. (Например, если клетка < 100, то он стал 0, в противном случае ничего не делать)Использовать карту на каждом элементе многомерного массива?

Использование map и lambda получаются, что каждый переменная в лямбда представляет собой массив размера 600. Есть ли у вас какая-либо элегантная функции, где я в состоянии перебирать все элементы массива любого размера и изменять их на месте?

ответ

2

Использование boolean indexing:

In [2]: arr = np.arange(25).reshape(5, 5) 

In [3]: arr 
Out[3]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]]) 

In [4]: arr[arr % 3 == 0] = 42 

In [5]: arr 
Out[5]: 
array([[42, 1, 2, 42, 4], 
     [ 5, 42, 7, 8, 42], 
     [10, 11, 42, 13, 14], 
     [42, 16, 17, 42, 19], 
     [20, 42, 22, 23, 42]]) 
0

Вы можете использовать

f=np.vectorize(<lambda>) 
f(a) 
Смежные вопросы