朱莉娅中带有参数的map函数

时间:2019-07-29 19:54:27

标签: function julia apply

我在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)

但是它不起作用...我该如何实现?

2 个答案:

答案 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