我在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
我想通过L
命令而不是map()
循环将这个函数应用10次到正方形对称矩阵for
上。我尝试过
map(samplesmallGram(L), 1:1:10)
但是它不起作用...我该如何实现?
答案 0 :(得分:2)
通常在集合的每个元素上使用map,就像每个元素的转换过程一样。
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
还要看一看减速器的想法。它们是相关的。
您可以将L用作全局变量,也可以在进行呼叫时使用箭头符号。
output = map(x -> samplesmallGram(L), 1:1:10)
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)
希望有帮助。
答案 1 :(得分:1)
map
假定其第一个参数采用了您迭代过的集合中的元素,因此您必须编写:
map(_ -> samplesmallGram(L), 1:1:10)
或
map(1:1:10) do _
samplesmallGram(L)
end
通过_
表示我不打算使用此参数。
但是,在这种情况下,我通常更喜欢写这样的理解:
[samplesmallGram(L) for _ in 1:1:10]
(作为旁注:您也可以写1:1:10
代替1:10
)