我知道有一个函数可以做到这一点,例如:
A = [1,2,0,0,4,0]
find(A)
3-element Array{Int64,1}:
1
2
5
Run Code Online (Sandbox Code Playgroud)
我试图按照自己的方式去做,但是,我被困在这里
for i=1:endof(A)
if A[i] != 0
[]
end
end
Run Code Online (Sandbox Code Playgroud)
提前致谢.
这是另一种选择:
function myfind(c)
a = similar(c, Int)
count = 1
@inbounds for i in eachindex(c)
a[count] = i
count += (c[i] != zero(eltype(c)))
end
return resize!(a, count-1)
end
Run Code Online (Sandbox Code Playgroud)
它实际上比find我测试的所有情况都要好,但是对于你发布的非常小的示例矢量,差异可以忽略不计.避免分支和动态增长索引数组可能有一些性能优势.
| 归档时间: |
|
| 查看次数: |
2076 次 |
| 最近记录: |