0

在 Antik 的手册中,有grid:subgridgrid:slice用于矩阵,但我没有找到向量。并且grid:subgrid grid:slice不能应用于向量,有错误。

更新

现在我必须用(subseq (grid:copy-to vec 'array) 0 3它来做这个,但这很棘手......

4

1 回答 1

3

网格:带向量的切片

您可以使用grid:slice向量:

CL-USER> (grid:slice #(1 2 3 4 5) '((:range 0 2)))
;=> #(1.0 2.0 3.0)

文档中grid:slice

— 功能:grid:slice grid index-selection &key destination drop

从网格中选择切片。索引选择是一个长度等于网格等级的列表。每个元素应该是以下之一:一个索引,指示要选择的索引,:all,如果要选择索引,则表示整个范围,:rev,如果要以相反的顺序选择索引,则表示整个范围,

(:range start end stride),表示要选择的索引范围;如果省略stride,则假定为1,

(:select value ...),表示要选择的显式值。

基于此,由于#(1 2 3 4 5)排名为 1,因此 index-selection 需要是长度为 1 的列表,并且单个元素是形式的列表(:range start end [stride]),在这种情况下为(:range 0 2)

网格:带有向量的子网格

您还可以grid:subgrid在向量上使用:

CL-USER> (grid:subgrid #(1 2 3 4 5) '(3) '(2))
;=> #(3.0 4.0 5.0)

文档中grid:subgrid

— 功能:grid:subgrid 网格尺寸 start &key destination drop

从现有网格的块创建网格,例如矩阵的行或块。维度给出了子网格的维度,并且 start 给出了每个索引的最小值,该索引对应于所有索引值为零的子网格元素。如果 drop 为真,则所有单轴都将被删除。

我不太熟悉 Antik 的术语,但对于向量的情况,尺寸参数似乎是您将提取多少元素的列表,而start参数是从哪里开始的列表。我的理解是基于一些实验:

CL-USER> (grid:subgrid #(1 2 3 4 5 6 7 8 9 10) '(3) '(2))
;=> #(3.0 4.0 5.0)
CL-USER> (grid:subgrid #(1 2 3 4 5 6 7 8 9 10) '(3) '(4))
;=> #(5.0 6.0 7.0)
CL-USER> (grid:subgrid #(1 2 3 4 5 6 7 8 9 10) '(2) '(5))
;=> #(6.0 7.0)
于 2013-09-14T18:47:27.990 回答