Как найти среднее значение каждой строки в матрице в APL? а самый высокий средний? - PullRequest
2 голосов
/ 20 апреля 2020

Я пытаюсь найти среднее значение каждой строки в матрице.

У меня есть две матрицы.
Одна матрица, NAMES, содержит плоский список имен (есть 3 имени ).
Другая матрица, GRADES, содержит числа.
Каждая строка в GRADES соответствует имени в NAMES.

Я хотел бы написать функцию, которая бы выходные данные:

Name AverageOfNumbersInRow
Name AverageOfNumbersInRow
Name AverageOfNumbersInRow

Я также хотел бы написать функцию, которая будет выводить имя с наибольшим средним значением:

Name

Например, для:

GRADES←3 4 ⍴ 98 34.5 78.9 34.7 22.3 33.9 23.8 24.11 100 89.3 92.6 87.9
NAMES←3 4 ⍴ 'JaneBob Mark'

Я бы хотел

Mark      

Я использую NARS2000.

1 Ответ

2 голосов
/ 20 апреля 2020

Ответ в Dyalog APL, поскольку вопрос был помечен APL:

Оператор ранга удобен для подобных операций. Блок кода (+/÷≢)⍤1 будет принимать среднее ( сумма , деленное на длина , равно (+/÷≢)) и применять его к строкам (ранг номер 1) в матрице. Пример:

      names←'tom' 'dick' 'harry'
      numbers←3 3⍴?⍨9
      numbers
9 5 8
6 1 2
4 3 7
      names,⍪(+/÷≢)⍤1⊢numbers
 tom    7.333333333
 dick   3          
 harry  4.666666667

РЕДАКТИРОВАТЬ из-за дополнительной информации

В NARS2000, чтобы найти имя с наибольшим средним значением с данными в указанном формате, вы можете использовать {⍺⌷⍨(⊢⍳⌈/)(+/÷≢)⍤1⊢⍵}:

      GRADES←3 4 ⍴ 98 34.5 78.9 34.7 22.3 33.9 23.8 24.11 100 89.3 92.6 87.9
      NAMES←3 4 ⍴ 'JaneBob Mark'
      f←{⍺⌷⍨(⊢⍳⌈/)(+/÷≢)⍤1⊢⍵}
      NAMES f GRADES
Mark
...