matrix - 在 Racket 中设置多维向量的各个元素

标签 matrix vector racket

对于一个大学项目,我必须用相当大的语言制作一个基于矩阵的游戏,该矩阵被定义为多维向量。 我需要设置矩阵的单个元素,我的代码是:

(require racket/vector)

(define test (make-vector 4 (make-vector 4 0)))

(define (matrix-set matrix row column value)
   (vector-set! (vector-ref matrix row) column value)
)
(display test)(newline)
(matrix-set test 0 0 1)
(display test)

并输出:

#(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0))
#(#(1 0 0 0) #(1 0 0 0) #(1 0 0 0) #(1 0 0 0))

我搜索了 Racket 文档,只找到了通过创建新矩阵来设置元素的函数,thisthis还有问题。

为什么该函数设置整个列而不是仅设置元素?

可以采取什么措施来解决这个问题?

最佳答案

(make-vector 4 (make-vector 4 0)) 等同于:

(let ((x (make-vector 4 0)))
  (vector x x x x))

也就是说,(make-vector 4 0) 仅被调用一次,其值用于外部向量的所有 4 个槽。

您需要的是类似 (for/vector ((i 4)) (make-vector 4 0)) 的东西,它将调用 (make-vector 4 0) code> (并创建一个不同的向量)为外部向量的每个元素。

关于matrix - 在 Racket 中设置多维向量的各个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450148/

相关文章:

python - 模拟云室轨迹

matlab - find() 的奇怪行为

r - 如何以优先布局对向量进行排序?

vector 中的 C++ 模板类对象

lisp - SICP、方案、DrRacket 问题 : Timer/profiler function?

Racket - 如何在 bash 脚本中获取 “previous executed command”?

Emacs 中的调试方案

matrix - 转置矩阵ada

c++ - 在矩阵 C++ 中交换 2 行

matlab - 使用 Matlab/Octave 向量化两个矩阵对应列的外积之和