我正在将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
答案 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程序以供程序中个人使用。