从Nim中的Neo矩阵中选择任意行?

时间:2019-03-15 13:22:37

标签: nim

我正在将Neo库用于Nim中的线性代数,我想从矩阵中提取任意行。

我可以按照自述文件中的示例显式选择连续的行序列,但不能选择不相交的行子集。

import neo

let x = randomMatrix(10, 4)
let some_rows = @[1,3,5]

echo x[2..4, All]  # works fine
echo x[some_rows, All] ## error

1 个答案:

答案 0 :(得分:0)

第一个echo之所以有效,是因为您正在创建Slice object,neo为此定义了一个proc。第二个echo使用整数序列,并且neo库中未定义这种访问。不幸的是,切片定义了连续的封闭范围,您甚至无法指定 steps iterate 的增量大于1,因此无法实现所需的结果。

从Matrix的结构来看,它似乎经过了高度优化,可以避免复制数据。矩阵转换操作似乎重用了先前矩阵的数据并更改了访问/维度。因此,不可能进行具有任意随机性的矩阵转换,示例中的索引专门访问非连续数据,并且需要在新结构中以某种方式对其进行编码。另外,如果您编写的@[1,5,3]会击败任何形式的常规迭代循环。

当然,另一种选择是编写一个proc,该proc接受一个序列而不是一个切片,然后构建一个新的矩阵来复制旧的矩阵。这意味着性能下降,但是如果您认为这是对库please request it in the issue tracker of the project的很好补充。如果不接受,那么您将需要编写这样的proc程序以供程序中个人使用。