J 中的数组:从一个索引到另一个

Arrays in J: indexing from one into another

我正在尝试使用 J 来执行类似于 Bernard Legrand (2009) Mastering Dyalog APL 第 128 页上显示的以下示例的操作。我一直没能找到将此代码直接转换为 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 - First Question

We would like to focus on some selected countries (14, 43, 50, 37, and 66) and calculate the total amount of their sales. Let’s first identify which items of BHCodes are relevant:

      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.

Then we can apply this filter to the amounts, and add them up:

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

为了您的目的,APL 的 是 J 的 e. (Member (In)) and APL's / is J's # (Copy)。

备注:

  1. APL 的 和 J 的 e. 并不完全等价,因为 APL 的 会在其 中查找每个 元素 左参数在其右参数的 元素 中,而 J 的 e. 查找每个 主要单元格 。它的左参数在其右参数的主要单元格中。

  2. APL 的 / 和 J 的 # 并不完全等同,因为 APL 的 / 沿尾轴运行,而 J 的 # 沿引导轴运行。虽然 APL 确实有 ,但它沿引导轴运行。还有更多的细微差别,但在这里不相关。