1

我有一个函数可以v将长度为 9 的向量以offset3 个为一组旋转:

∇ r ← offset rot3 v
    r ← , offset ⌽ 3 3 ⍴ v
∇

它似乎工作:

      2 rot3 ⍳ 9
3 1 2 6 4 5 9 7 8

然后是一个以 3 个为一组m水平旋转 9x9 矩阵的函数:offset

∇ r ← offset rot3h m
    r ← ⊃ offset rot3¨ ,/ m
∇

这似乎也有效:

      a ← 2 rot3h 9 9 ⍴ ⍳ 81
      a
 3  1  2  6  4  5  9  7  8
12 10 11 15 13 14 18 16 17
21 19 20 24 22 23 27 25 26
30 28 29 33 31 32 36 34 35
39 37 38 42 40 41 45 43 44
48 46 47 51 49 50 54 52 53
57 55 56 60 58 59 63 61 62
66 64 65 69 67 68 72 70 71
75 73 74 78 76 77 81 79 80
      ⍴ a
9 9

现在我想构建一个包含给定矩阵旋转 1、2 和 3 的向量(这是恒等式,但没关系):

所以我尝试了这个(思考:“制作两个向量的外积,第一个包含 1、2 和 3;第二个包含 a”):

a ← 9 9 ⍴ ⍳ 81
1 2 3 ∘.rot3h ⊂a

不幸的是,这样做的结果是:

      a ← 9 9 ⍴ ⍳ 81
      1 2 3 ∘.rot3h ⊂a
 2  3  1  5  6  4  8  9  7   1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 1 
 11 12 10 14 15 13 17 18 16                                        
 20 21 19 23 24 22 26 27 25                                        
 29 30 28 32 33 31 35 36 34                                        
 38 39 37 41 42 40 44 45 43                                        
 47 48 46 50 51 49 53 54 52                                        
 56 57 55 59 60 58 62 63 61                                        
 65 66 64 68 69 67 71 72 70                                        
 74 75 73 77 78 76 80 81 79                                        

有人可以解释一下我的推理在哪里出错了吗?

4

2 回答 2

3

尝试

  1 2 3 rot3h¨⊂a

把a括起来有把它变成一个标量的效果,那么你可以通过标量扩展依次应用1、2和3 rot3h。(1 + 2 3 4 扩展了 1 使其与 2 3 4 的所有元素相加)

回到原来的表达式,当使用外积时,直观的期望是你得到一个矩阵矩阵。由于正确的参数是标量,而预期结果是矩阵向量,因此使用每个矩阵可能更自然。

话虽如此,您的原始表达式可以正常工作并在 Dyalog APL 中返回相同的结果。

很好的例子——我会向 GNU APL 开发人员报告这个错误。

于 2013-11-13T10:03:42.560 回答
2

我用 GNU APL 1.1 的 SVN 版本 4525 得到这个:

∇ r ← offset rot3 v
[1]     r ← , offset ⌽ 3 3 ⍴ v
[2] ∇

      ∇ r ← offset rot3h m
[1]     r ← ⊃ offset rot3¨ ,/ m
[2] ∇

      a ← 9 9 ⍴ ⍳ 81
      1 2 3 ∘.rot3h ⊂a
  2  3  1  5  6  4  8  9  7    3  1  2  6  4  5  9  7  8 
 11 12 10 14 15 13 17 18 16   12 10 11 15 13 14 18 16 17 
 20 21 19 23 24 22 26 27 25   21 19 20 24 22 23 27 25 26 
 29 30 28 32 33 31 35 36 34   30 28 29 33 31 32 36 34 35 
 38 39 37 41 42 40 44 45 43   39 37 38 42 40 41 45 43 44 
 47 48 46 50 51 49 53 54 52   48 46 47 51 49 50 54 52 53 
 56 57 55 59 60 58 62 63 61   57 55 56 60 58 59 63 61 62 
 65 66 64 68 69 67 71 72 70   66 64 65 69 67 68 72 70 71 
 74 75 73 77 78 76 80 81 79   75 73 74 78 76 77 81 79 80 
        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 45 
       46 47 48 49 50 51 52 53 54 
       55 56 57 58 59 60 61 62 63 
       64 65 66 67 68 69 70 71 72 
       73 74 75 76 77 78 79 80 81
于 2013-11-15T16:45:11.817 回答