matrix - APL:数组的元素替换和乘法

标签 matrix multidimensional-array apl dyalog array-replace

假设在 APL 语言中,我有一个形状为 10x3 的二维数组。我无法弄清楚如何:
将整个数组中所有出现的特定数字(例如 1、2、3、4)分别替换为 0、10、100、1000。所以我想在整个数组中映射 1 到 0、2 到 10、3 到 100 和 4 到 1000。

最佳答案

我将使用此示例数据:

      ⎕ ← array ← ? 10 3 ⍴ 10
 5  7  8
10  2 10
 9  8 10
 3  5  4
 6  6  4
 2  9  7
 4  5 10
 1  9  4
 1 10  1
10  5  3
      specific ← 1 2 3 4
      replacements ← 0 10 100 1000
让我们定义一个辅助函数来识别需要映射的元素的出现,即那些 成员(member)我们的具体号码列表:
      Occurrences ← {⍵ ∊ specific}
      Occurrences array
0 0 0
0 1 0
0 0 0
1 0 1
0 0 1
1 0 0
1 0 0
1 0 1
1 0 1
0 0 1
接下来,我们定义一个映射函数来查找 的索引特定数字集合中的每个元素,并将这些索引用于 索引为 替代品:
      Map ← {replacements[specific ⍳ ⍵]}
      Map 3 1 4 1
100 0 1000 0
现在我们可以应用映射函数 事件:
      Map @ Occurrences array
   5  7    8
  10 10   10
   9  8   10
 100  5 1000
   6  6 1000
  10  9    7
1000  5   10
   0  9 1000
   0 10    0
  10  5  100
我们可以将整个事物定义为单个替换函数:
      Replace ← Map @ Occurrences
或者甚至直接获取没有帮助函数的完整定义:
      Replace ← {replacements[specific ⍳ ⍵]} @ {⍵ ∊ specific}
结果定义将相同:Try it online!
      Replace array
   5  7    8
  10 10   10
   9  8   10
 100  5 1000
   6  6 1000
  10  9    7
1000  5   10
   0  9 1000
   0 10    0
  10  5  100
我们甚至可以定义一个通用的替换操作符:Try it online!
      _Replace_ ← {⍺⍺ ( ⍵⍵ ⌷⍨∘⊂ ⍳ ) @ ( ∊∘⍺⍺ ) ⍵}
      (specific _Replace_ replacements) array
   5  7    8
  10 10   10
   9  8   10
 100  5 1000
   6  6 1000
  10  9    7
1000  5   10
   0  9 1000
   0 10    0
  10  5  100
此运算符定义可以在 APLcart 中找到与 a query like search and replace elements .

考虑使用特定值和替换值之间的数学关系,而不是进行查找:
      ( 1 ≠ specific ) × 10 * specific - 1
0 10 100 1000
现在我们可以写:Try it online!
      {( 1 ≠ ⍵ ) × 10 * ⍵ - 1} @ {⍵ ∊ specific} array
   5  7    8
  10 10   10
   9  8   10
 100  5 1000
   6  6 1000
  10  9    7
1000  5   10
   0  9 1000
   0 10    0
  10  5  100

关于matrix - APL:数组的元素替换和乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64259704/

相关文章:

matlab - 通过用一个 2D 矩阵索引另一个 2D 矩阵来矢量化创建 3D 矩阵

python - 如何从多维数组中提取一列?

C - 读取和解析方法未获得第二行输入

c - 考虑到有限的 RAM 空间,如何在 C 中声明和使用大小为 [16][256] 的二维 int 数组。?

arrays - 将数组的结果写入下一个可用单元格

apl - 标量和向量之间的区别在 APL 中有什么用处?

split - 如何在 APL 中将数字拆分为数字

formatting - 如何格式化数字向量和字符串向量? (Dyalog APL)

c++ - 旋转模型矩阵时的形状变形

c# - 在 Math.Net 多元回归中使用矩阵和向量类型