Применяйте эту функцию только к двумерным векторным операциям с матричной матрицей - PullRequest
0 голосов
/ 29 декабря 2018

ребята, у меня есть эта функция

def averageRating(a,b):
  avg = (float(a)+float(b))/2
  return round(avg/25)*25

В настоящее время я зацикливаюсь на моем массиве np, который является просто двумерным массивом с числовыми значениями.То, что я хочу сделать, это иметь «a» быть первым массивом и «b» быть вторым массивом и получать среднее значение для каждой строки, и что я хочу получить, так это массив значений.Я использовал среднее, но не смог найти способ отредактировать его и иметь часть round () или несколько (avg * 25) / 25.Моя цель - избавиться от зацикливания и заменить его на векторизованные операции из-за медленной зацикливания.Извините за вопрос, новый для python и numpy.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018
def averageRating(a,b):
    avg = (np.average(a,axis=1) + np.average(b,axis=1))/2
    return np.round(avg,0)

Это должно сделать то, что вы ищете, если я правильно понимаю вопрос.Указание оси = 1 в np.average даст среднее значение для строк (ось = 0 будет средним для столбцов).И 0 в np.round округлит до 0 десятичных знаков, изменяя его, изменит количество десятичных знаков, до которых вы округляете.Надеюсь, это поможет!

0 голосов
/ 29 декабря 2018

def averageRating (a, b):

averages = []
for i in range( len(a) ):
    averages.append( (a[i] + b[i]) / 2 )

return averages

Если ваши массивы имеют одинаковую длину, это должно быть простым разрешением.

Это не исключает использование циклов forоднако в вычислительном отношении это будет дешевле, чем текущий подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...