I created the following function in Julia:
using StatsBase
function samplesmallGram(A::AbstractMatrix)
n=size(A,1)
kpoints=sort(sample((1:n),Int(0.05*n),replace=false))
Lsmall=A[kpoints,kpoints]
return kpoints,Lsmall
end
I want to apply this function 10 times to a square symmetric matrix L
I have, through the map()
command, instead of a for
loop. I tried
map(samplesmallGram(L), 1:1:10)
but it doesn't work... How can I achieve this?
Typically map is used on each element of a collection, like a conversion process for each element.
https://docs.julialang.org/en/v1/base/collections/index.html#Base.map
julia> map(x -> x * 2, [1, 2, 3])
3-element Array{Int64,1}:
2
4
6
julia> map(+, [1, 2, 3], [10, 20, 30])
3-element Array{Int64,1}:
11
22
33
Also look at the idea of reducers. They are related.
You can either pass in L as a global, or use the arrow notation when making the call.
output = map(x -> samplesmallGram(L), 1:1:10)
Note that x is not the argument to the function in this case, instead L is passed in 10 times.
A = []
function samplesmallGram(index)
global A
n=size(A,1)
kpoints=sort(sample((1:n),Int(0.05*n),replace=false))
Lsmall=A[kpoints,kpoints]
return kpoints,Lsmall
end
output = map(samplesmallGram, 1:1:10)
Hope that helps.
map
assumes that its first argument takes elements from the collection you iterate over, so you have to write:
map(_ -> samplesmallGram(L), 1:1:10)
or
map(1:1:10) do _
samplesmallGram(L)
end
By _
I indicate that I do not intend to use this argument.
However, in such cases I typically prefer to write a comprehension like this:
[samplesmallGram(L) for _ in 1:1:10]
(as a side note: instead of 1:1:10
you can also write 1:10
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With