Увеличьте числа в apl

У меня есть следующие данные:

a b c d
5 9 6 0
3 1 3 2

Символы в первом ряду, числа во втором ряду.

Как получить символ, соответствующий наибольшему числу во второй строке, и как увеличить соответствующее число во второй строке? (Например, здесь столбец b имеет наибольшее число, 9, поэтому увеличьте это число на 10%.)

Я использую Дялог версии 17.1.


person cickness    schedule 23.02.2020    source источник


Ответы (1)


С:

      ⎕←data←3 4⍴'a' 'b' 'c' 'd' 5 9 6 0 3 1 3 2
a b c d
5 9 6 0
3 1 3 2

Вы можете извлечь вторую строку с помощью:

      2⌷data
5 9 6 0

Теперь оцените его по убыванию, то есть найдите индексы, которые бы отсортировали его от высшего к низшему:

      ⍒2⌷data
2 3 1 4

Первое число — это столбец, который мы ищем:

      ⊃⍒2⌷data
2

Теперь мы можем использовать это для извлечения символа из первой строки:

      data[⊂1,⊃⍒2⌷data]
b

Но нам нужен только индекс столбца, а не фактический символ. Полный индекс числа, которое мы хотим увеличить:

     2,⊃⍒2⌷data
2 2

Извлечение данных, чтобы увидеть, что мы получили правильный индекс:

      data[⊂2,⊃⍒2⌷data]
9

Теперь мы можем либо создать новый массив с целевым значением, увеличенным на 10%:

      1.1×@(⊂2,⊃⍒2⌷data)⊢data
a   b c d
5 9.9 6 0
3 1   3 2

Или измените его на месте:

      data[⊂2,⊃⍒2⌷data]×←1.1
      data
a   b c d
5 9.9 6 0
3 1   3 2

Try it online!

person Adám    schedule 23.02.2020
comment
Вы можете объяснить, как делает эту ситуацию? Как связать 3 ряд? например, если число в третьей строке 3, то число во второй строке умножаем на 2, а если 1 то умножаем на 1,5 - person cickness; 23.02.2020
comment
@cickness Я предлагаю вам задать для этого новый вопрос и обязательно объяснить, какова именно связь, которая заставляет 3 умножаться на 2, а 1 умножаться на 1,5. Это математическая формула или справочная таблица? - person Adám; 23.02.2020