我正在寻找能够执行matlab find
函数而不需要循环的矢量(快速)代码。 find
返回给定函数的值和索引。 Swift的过滤器,map或reduce不返回索引。
例如
X = [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
[row,col] = find(X>0 & X<10,3)
row =
2
3
4
col =
1
1
1
来自matlab文档
[row,col] = find(___)返回每个的行和列下标 数组X中的非零元素,使用任何输入参数 以前的语法。
答案 0 :(得分:1)
enumerate()
返回一系列可以的索引/元素对
被过滤:
let vec = [18, 3, 1, 11, 8, 10, 11, 3, 9]
let result = filter(enumerate(vec), { (idx, elem) in elem > 2 && elem < 10 } )
println(result) // [(1, 3), (4, 8), (7, 3), (8, 9)]
或者,如果您只想要索引:
let indexes = filter(enumerate(vec), { (idx, elem) in elem > 2 && elem < 10 } ).map { $0.0 }
println(indexes) // [1, 4, 7, 8]
答案 1 :(得分:0)
Non-recursive Automake可能适合此处。它实现了Swift Matrix Library以及许多科学功能。
这个库的灵感来自Python和Matlab。这个框架从Swift调用Accelerate框架,因此速度非常快(可以在 argwhere 中找到速度测试。)
其他功能可在 Speed 中找到,但它提供以下功能:
ndarray
和matrix
课程。所有数学运算符(+-*/
)都称为加速函数。eig, svd, fft, solve, dot, inv
全部实现。可以在 Examples 中找到安装详情。
(注意:我是作者)