首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案制定矩阵

方案制定矩阵
EN

Stack Overflow用户
提问于 2017-12-31 18:39:34
回答 1查看 663关注 0票数 0

我是新计划的,我在方案中遇到矩阵的问题。我需要创建一个函数,用一个大方阵和一个小方阵(条件是:小的长度应该是大方阵的除数),通过对大的矩阵和小的矩阵进行运算,创建一个新的矩阵。我已经成功地将大矩阵分解成我想要的大小,并且我成功地对它进行了操作以获得结果。

我就是这样做的:

代码语言:javascript
复制
(define (matrix-op big small x y)
    (if (< y (/ (length big) (length small))))
        (if (< x (/ (length big) (length small)))
            (cons (calculate (split-y (split-x big small x) small y) small)
                  (matrix-op big small (+ x 1) y)) 
            (matrix-op big small 0 (+ y 1)) ; <- this is where i need to split
        )
        '()
    )
)

我的计算函数只返回一个原子值,所以当我像这样运行这个函数时,它会给我一个像'(val val)这样的输出,但是我想要的是格式化输出类似'((val val) (val val))。我该怎么做呢?提前谢谢。

我意识到我不能正确地解释这个问题。我想要的是一个函数,它需要两个不同的方阵--一个大的和一个小的,把大的一个除以和小的一个一样的大小,对它们进行运算,创建一个新的矩阵,如果大的矩阵是mxm,小的矩阵是nxn,那么这个矩阵的大小是m/n。示例:

代码语言:javascript
复制
big '(                       small '(
(8 0 3 1 5 3 2 2)                    (8 4)
(7 1 1 4 3 7 1 4)                    (9 5)
(1 3 7 4 3 6 6 3)                    )
(0 9 8 6 5 6 4 3)
(1 7 6 9 6 6 7 2)
(5 7 1 0 2 9 5 3)
(0 5 4 6 6 6 3 0)
(3 6 2 7 7 5 7 0)
)

我需要将大小与小的大小分开,计算结果如下:

代码语言:javascript
复制
for x=0 y=0 part is '(       calculate result is 5
                      (8 0)
                      (7 1)
                      )

for x=1 y=0 part is '(       calculate result is 2
                      (3 1)
                      (1 4)
                      )

实际上,我确实返回了计算的结果,但是用上面给出的方法,我的返回就像'(5 2 4 2 2 6 4 4 4 3 5 4 2 4 6 3)一样,但是我想返回如下:

代码语言:javascript
复制
'(
  (5 2 4 2) 
  (2 6 4 4) 
  (4 3 5 4) 
  (2 4 6 3)
 )

那么,如何才能将返回列表拆分到我想要分割的位置呢?

EN

回答 1

Stack Overflow用户

发布于 2017-12-31 23:07:44

我想你现在想做的太多了。把一个更大的问题分成更小的问题总是可以的。

如果我理解你的观点,我们的想法是取两个正方形矩阵,其中一个可能是另一个维度的倍数,然后对元素进行一对一的运算。例如:

代码语言:javascript
复制
'((1 2 3)                 '((1 2 3)   '((7 7 7)       '(( 8  9 10)
  (4 5 6)  + '((7))  -->    (4 5 6)  +  (7 7 7)   -->   (11 12 13)
  (7 8 9))                  (7 8 9))    (7 7 7))        (14 15 16))

我将继续假设这是我们所希望的。

注意,如果两个矩阵大小相同,那么一个简单的嵌套map将很容易地组合所有元素。剩下的是不同尺寸的问题。解决这件事,你就金碧辉煌。

概述:

代码语言:javascript
复制
(define (f op small-M big-M)
  (f-apply-pairwise-op 
    op
    (f-biggify small-M (/ (length big-M) (length small-M)))
    big-M))

现在你已经把这个问题分成了两个小的部分:

代码语言:javascript
复制
(define (f-apply-pairwise-op op A B) ...)  ; produces pairwise 'A op B'

(define (f-biggify M n) ...)  ; tile M n times wider and taller

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48044935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档