在Dyalog APL中访问嵌套数组中每个数组中的相同行/列。

huangapple go评论72阅读模式
英文:

Access same row/column in each array in nested arrays in Dyalog APL

问题

以下是翻译好的内容:

有没有一种方法可以在不使用循环的情况下将标量相乘或相加到嵌套数组的每个数组的同一行或列中?例如,我想要将下面示例的嵌套数组中每个数组的第二列(或行)中的所有值乘以2。

(4 3)(5 3)(3 3)⍴⍪⍳15
┌────────┬────────┬─────┐
 1  2  3 2  4  61 2 3
 4  5  6 8 10 124 5 6
 7  8  914 16 187 8 9
10 11 1220 22 24     
        26 28 30     
└────────┴────────┴─────┘

请注意,我在示例中使用了APL编程语言的符号来执行所需的操作。

英文:

Is there a way to multiply or add a scalar to the same row or column in each array of a nested array without a loop? For example I would like to multiply all the values in the 2nd column (or row) of each array by 2 for the sample nested array below.

      (4 3)(5 3)(3 3)⍴¨⊂⍳15
┌────────┬────────┬─────┐
│ 1  2  3│ 1  2  3│1 2 3│
│ 4  5  6│ 4  5  6│4 5 6│
│ 7  8  9│ 7  8  9│7 8 9│
│10 11 12│10 11 12│     │
│        │13 14 15│     │
└────────┴────────┴─────┘

答案1

得分: 2

不使用`:For`控制结构也可以完成,但在*Each*操作符(`¨`)的形式中仍然会有一个显式的循环:
```apl
      a  (4 3)(5 3)(3 3)¨⊂⍳15  ⍝ 命名您的数组
      2×@2¨ a   ⍝ 2乘以每个的[行] 2
┌────────┬────────┬───────┐
 1  2  3 1  2  31  2  3
 8 10 12 8 10 128 10 12
 7  8  9 7  8  97  8  9
10 11 1210 11 12       
        13 14 15       
└────────┴────────┴───────┘
      2+@21¨ a   ⍝ 2加在每个的[元素] 2行上
┌────────┬────────┬──────┐
 1  4  3 1  4  31  4 3
 4  7  6 4  7  64  7 6
 7 10  9 7 10  97 10 9
10 13 1210 13 12      
        13 16 15      
└────────┴────────┴──────┘

@操作符作用于前导轴,矩阵的前导轴包含行,因此第2个单元格是第2行。⍤1操作符限制了+@2的“视图”只能看到行,这些行是秩1的子数组。


<details>
<summary>英文:</summary>
You can do it without using a `:For` control structure, but there&#39;ll still be an explicit loop in the form of the *Each* operator (`&#168;`):
```apl
a ← (4 3)(5 3)(3 3)⍴&#168;⊂⍳15  ⍝ naming your array
2&#215;@2&#168; a   ⍝ 2 multiplies at [row] 2 of each
┌────────┬────────┬───────┐
│ 1  2  3│ 1  2  3│1  2  3│
│ 8 10 12│ 8 10 12│8 10 12│
│ 7  8  9│ 7  8  9│7  8  9│
│10 11 12│10 11 12│       │
│        │13 14 15│       │
└────────┴────────┴───────┘
2+@2⍤1&#168; a   ⍝ 2 adds at [element] 2 row-wise of each
┌────────┬────────┬──────┐
│ 1  4  3│ 1  4  3│1  4 3│
│ 4  7  6│ 4  7  6│4  7 6│
│ 7 10  9│ 7 10  9│7 10 9│
│10 13 12│10 13 12│      │
│        │13 16 15│      │
└────────┴────────┴──────┘

The @ operator work on leading axes, the leading axis of a matrix being containing the rows, so the 2nd cell is the 2nd row. The ⍤1 operator restricts the "view" of +@2 to only ever see rows, which are subarrays of rank 1..

huangapple
  • 本文由 发表于 2023年6月5日 22:02:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/76407218.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定