Массивы в J: индексация из одного в другое - PullRequest
0 голосов
/ 24 февраля 2019

Используя JI, я пытаюсь сделать что-то похожее на следующий пример, показанный на стр. 128 из Мастеринг Dyalog APL Бернара Леграна (2009).Мне не удалось найти прямое преобразование этого кода в J, что я и хочу.

Вот пример:

BHCodes ← 83 12 12 83 43 66 50 81 12 83 14 66 etc...
BHAmounts ← 609 727 458 469 463 219 431 602 519 317 663 631...

13.3.2 - Первый вопрос

Мы бы хотели сосредоточиться на некоторых выбранных странах (14, 43, 50, 37 и 66) и рассчитать общую сумму их продаж.Давайте сначала определим, какие позиции BHCodes актуальны:

      Selected ← 14 43 50 37 66
      BHCodes  ∊ Selected
0 0 0 0 1 1 1 0 0 0 1 1 0 1 0     ⇦ Identifies sales in the selected countries only.

Затем мы можем применить этот фильтр к суммам и сложить их:

     (BHCodes ∊ Selected) / BHAmounts
463 219 431 663 631 421
     +/ (BHCodes ∊ Selected) / BHAmounts
2828

1 Ответ

0 голосов
/ 24 февраля 2019
+/ (BHCodes e. Selected) # BHAmounts

Для ваших целей APL - это J's e. ( Member (In) ), а APL / - это J's # ( Copy )).

Примечания:

  1. APL и J e. не полностью эквивалентны, поскольку APL ищет каждый элемент в своем левом аргументе среди элементов своего правого аргумента, в то время как J e. ищет каждую главную ячейку .его левого аргумента в главных ячейках его правого аргумента.

  2. APL / и J # не полностью эквивалентны, так как APL / работаетвдоль задней оси, в то время как J's # действует вдоль ведущей оси.APL имеет , который работает вдоль ведущей оси.Есть еще нюансы, но они здесь не актуальны.

...