英文:
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 6│1 2 3│
│ 4 5 6│ 8 10 12│4 5 6│
│ 7 8 9│14 16 18│7 8 9│
│10 11 12│20 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 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¨ a ⍝ 2加在每个的[元素] 2行上
┌────────┬────────┬──────┐
│ 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│ │
└────────┴────────┴──────┘
@
操作符作用于前导轴,矩阵的前导轴包含行,因此第2个单元格是第2行。⍤1
操作符限制了+@2
的“视图”只能看到行,这些行是秩1的子数组。
<details>
<summary>英文:</summary>
You can do it without using a `:For` control structure, but there'll still be an explicit loop in the form of the *Each* operator (`¨`):
```apl
a ← (4 3)(5 3)(3 3)⍴¨⊂⍳15 ⍝ naming your array
2×@2¨ 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¨ 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..
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论