multidimensional-array - 如何在 Dyalog APL 中将三元组向量转换为 3xnx3 矩阵?

标签 multidimensional-array vector reshape apl dyalog

我有一个包含 9000 个整数元素的向量,其中每组 9 有 3 个我想分离出来的子组,从而产生一个形状为 3 1000 3 的矩阵。这就是我所做的:

⎕IO←0
m←(9÷⍨≢data) 9⍴data
a←m[;0 1 2]
b←m[;3 4 5]
c←m[;6 7 8]
d←↑a b c
哪个可以满足我的要求-但是我可以直接塑造矢量吗?

最佳答案

解决方案

1 0 2 ⍉ (9÷⍨≢data) 3 3 ⍴ data
解释
通过使用 ⍳45作为占位符数据,我们可以看到预期的内容:
      data ← ⍳45
      a←m[;0 1 2]
      b←m[;3 4 5]
      c←m[;6 7 8]
      d←↑a b c
      d
 0  1  2
 9 10 11
18 19 20
27 28 29
36 37 38

 3  4  5
12 13 14
21 22 23
30 31 32
39 40 41

 6  7  8
15 16 17
24 25 26
33 34 35
42 43 44
最终的形状显然是 3 (9÷⍨≢data) 3 ,但我们首先从每一层填充一行,然后从每一层填充第二行,依此类推。将此与正常的填充方式进行比较;第一层的所有行,然后是第二层的所有行,依此类推:
      3 (9÷⍨≢data) 3⍴data
 0  1  2
 3  4  5
 6  7  8
 9 10 11
12 13 14
        
15 16 17
18 19 20
21 22 23
24 25 26
27 28 29
        
30 31 32
33 34 35
36 37 38
39 40 41
42 43 44
换句话说,我们的工作是交换前两个轴的填充顺序。为此,我们按照我们希望它们填充的顺序列出轴长度:
      (9÷⍨≢data) 3 3⍴data
 0  1  2
 3  4  5
 6  7  8
        
 9 10 11
12 13 14
15 16 17
        
18 19 20
21 22 23
24 25 26
        
27 28 29
30 31 32
33 34 35
        
36 37 38
39 40 41
42 43 44
现在我们需要交换前两个轴。这可以使用二元转置函数 这(对于我们的用例)可以被认为是“重新排序轴”功能。左参数是您希望相应轴移动的数组(第一个元素定义第一个轴的最终位置,依此类推)。虽然轴的正常索引是 0 1 2我们可以用 1 0 2 交换前两个轴.
因此1 0 2 ⍉ (9÷⍨≢data) 3 3 ⍴ data拿我们的(9÷⍨≢data) 3 3形状并将其放入所需的形状3 (9÷⍨≢data) 3 .
    d ≡ 1 0 2 ⍉ (9÷⍨≢data) 3 3 ⍴ data
1

关于multidimensional-array - 如何在 Dyalog APL 中将三元组向量转换为 3xnx3 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62634746/

相关文章:

java - 给定多边形的坐标求长度

performance - 如何对 Vec 或切片进行部分排序?

python - 基于列值 reshape Pandas 数据框

Python:将并行数组 reshape 为训练集

ruby - 如何选择第一个内部数组?

javascript - 二维数组与 javascript (p5js)

c++ - 如何在不将它们作为参数传递的情况下访问线程中的类数据成员?

在 R 中 reshape 复杂的数据集

java - 将多维数组中的文本替换为 Java 中另一个多维数组中的另一个文本

c++ - 如何在类函数中编辑 vector 的私有(private)成员?