Увеличьте числа в apl - PullRequest
       84

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

1 голос
/ 23 февраля 2020

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

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

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

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

Я использую Dyalog версии 17.1.

1 Ответ

0 голосов
/ 23 февраля 2020

С помощью:

      ⎕←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

Попробуйте онлайн!

...