Я хочу оценить каждое значение в двумерном массиве чисел с плавающей запятой, если оно попадает в минимальные, максимальные границы определенного числового класса.Далее я хочу переназначить это значение на «оценку», связанную с этим классом.
Например, границы классов могут быть:
>>> class1 = (0, 1.5)
>>> class2 = (1.5, 2.5)
>>> class3 = (2.5, 3.5)
Баллы классов:
>>> score1 = 0.75
>>> score2 = 0.50
>>> score3 = 0.25
Значения вне любого из классов должны по умолчанию равны, например, 99.
Я пробовал следующее, но столкнулся с ошибкой ValueError из-за широковещательной рассылки.
>>> import numpy as np
>>> arr_f = (6-0)*np.random.random_sample((4,4)) + 0 # array of random floats
>>> def reclasser(x, classes, news):
>>> compare = [x >= min and x < max for (min, max) in classes]
>>> try:
>>> return news[compare.index(True)
>>> except Value Error:
>>> return 99.0
>>> v_func = np.vectorize(reclasser)
>>> out = v_func(arr_f, [class1, class2, class3], [score1, score2, score3])
ValueError: operands could not be broadcast together with shapes (4,4) (4,2) (4,)
Любые предложения о причинах возникновения этой ошибки и способах ее исправления были бы весьма полезны.Кроме того, если я нахожусь на неправильном пути, используя векторизованные функции, я также был бы рад услышать это.