лямбда-функция на массиве. Что не так с этим куском кода? - PullRequest
0 голосов
/ 15 ноября 2018

Что не так с этим кодом:

импортировать numpy как np

A = np.array([[-0.5, 0.2, 0.0],
          [4.2, 3.14, -2.7]])

asign = lambda t: 0 if t<0 else 1
asign(A)
print(A)

Ожидается:

     [[0.  1.  0.]
      [ 1.  1. 0.]]

ValueError: Истинное значение массива с болеечем один элемент неоднозначен.Используйте a.any () или a.all ()

Ответы [ 3 ]

0 голосов
/ 29 апреля 2019

Ну, лямбда сама по себе не пройдет весь массив. Для этого вам понадобится функция более высокого порядка. В данном случае: карта.

A = np.array([[-0.5, 0.2, 0.0],
              [4.2, 3.14, -2.7]])

asign = lambda t: 0 if t<0 else 1
A = list(map(asign, A))

Карта будет перебирать каждый элемент и передавать его через функцию. Я завернул карту в список, потому что он возвращает объект фильтра типа, но вы можете преобразовать его таким образом.

0 голосов
/ 29 апреля 2019

Вы можете использовать лямбду, но типы данных numpy позволяют вам выполнять много операций типа "matlab" (для тех, кто к этому привык):

  • python:

    a = np.array([1, 2, 3, 4, 5])
    ((a > 1) & (a < 3)).astype(int)
    # array([0, 1, 0, 0, 0])
    
  • октава / matlab

    a = [1,2,3,4,5];
    a>1 & a<3
    % ans =
    %
    %  0  1  0  0  0
    
0 голосов
/ 15 ноября 2018

Это сработало для меня:

A = A.clip(min=0, max=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...