matrix - 为什么这不会在 Racket 中生成矩阵?

标签 matrix racket

我想在 Racket 中生成一个矩阵(可能使用进程中的数字,使用0进行简化,如下所示)。我试过了

(array (for/vector ((x (range 4)))
           (for/vector ((y (range 4)))
             0)))

这给出了

(array '#(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0)))

虽然够傻的,

(matrix? (array (for/vector ((x (range 4)))
           (for/vector ((y (range 4)))
             0))))

给出#f(array '#(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0)))。然而

> (matrix? (array #(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0))))
#t

那么这是怎么回事呢?


编辑:矩阵模块是从 math/arraymath/matrix 导入的。

最佳答案

根据 docsarray 特殊形式定义了新语法。它期望“表达式的嵌套行”作为其参数,这与向量不同。例如:

(require math/array)
(require math/matrix)

(array #[#[1]])
=> (array #[#[1]])
(matrix? (array #[#[1]]))
=> #t

(array (vector (vector 1)))
; notice the difference, there's a quote and the brackets are not square
=> (array '#(#(1)))
(matrix? (array (vector (vector 1))))
=> #f

总结一下:您不能使用向量的向量来替代 array 作为其参数所需的特殊语法。这不仅仅是删除引号和使用方括号的问题,它们是不同类型的对象,尽管它们在打印时看起来很相似。

关于matrix - 为什么这不会在 Racket 中生成矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66747017/

相关文章:

java - 使用 Jblas : Matrices need to have same length 的矩阵乘法

racket - 使用 Racket FFI 在 PortAudio 中注册回调会导致段错误

opencv - 在 Emgucv 或 Opencv 中将多个一维矩阵复制到一个大的一维矩阵中

c - 在二部图中查找映射

matrix - 在Mathematica中将坐标系转换为矩阵

scheme - Racket 迭代和递归

racket - 我的动画地点图像程序出了什么问题?

scheme - 类方法不能用于andmap?

postgresql - Racket 中 PostgreSQL 的本地套接字 (db.plt)

function - 以矩阵接口(interface)为参数的Go函数