Сокращение строк с индексированными параметрами в GNU APL - PullRequest
1 голос
/ 20 июня 2019

Я использую следующую структуру данных:

x1a ← 2 1 ⍴ 1 0
x1b ← ⍬

x2a ← 2 2 ⍴ 1 1 0 0
x2b ← 2 1 ⍴ 1 0

x3a ← 1 2 ⍴ 1 0
x3b ← 1

q ← (x3a x3b) (x2a x2b) (x1a x1b)

И пытаюсь сократить строку, эквивалентную следующим операциям:

output ← x3b + x3a +.× x2b + x2a +.× x1a

Я думал, что результат будет похож наследующее, но я не могу получить правильный ранг / рабочие операции:

{⍵[2] + ⍺[1] +.× ⍵[1]}/q

Ценю любой совет или помощь!

1 Ответ

2 голосов
/ 20 июня 2019

Есть три вопроса:

  1. Вы используете ⍵[1], что даст вам вложенный элемент . Вместо этого используйте "pick".

  2. У вас есть опечатка: ⍵[2] вместо нее следует использовать , т.е. 2⊃⍺

  3. Функция, которую вы сокращаете, ожидает, что ее правый аргумент будет двухэлементным вектором, где она использует только первый элемент. Поэтому необходимо вернуть такую ​​структуру для следующей итерации.

Также обратите внимание, что результат будет оба заключен в связи с / необходимостью понизить ранг с 1 до 0, и, кроме того, будет иметь вставленный фиктивный элемент, поэтому нам нужно выбрать первый элемент единственного элемента, который есть, ⍬ 1⊃:

      x3b + x3a +.× x2b + x2a +.× x1a
3
      ⍬ 1⊃{((2⊃⍺) + (1⊃⍺) +.× (1⊃⍵)) 'dummy'}/q
3

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

...