【问题标题】:How to know the index of the iterator when using map in Julia在 Julia 中使用 map 时如何知道迭代器的索引
【发布时间】:2016-12-01 00:33:39
【问题描述】:

我有一个数组数组,称为y

y=Array(Vector{Int64}, 10)

这基本上是一维数组的列表(其中 10 个),每个一维数组的长度为 5。下面是如何初始化它们的示例:

for i in 1:10
    y[i]=sample(1:20, 5)
end

每个一维数组包含 5 个随机采样的整数,介于 120 之间。

现在我正在应用一个映射函数,其中对于 y 中的每个一维数组,不包括从 120 的数字:

map(x->setdiff(1:20, x), y)

但是,我想确定当函数应用于y[i] 时,如果setdiff(1:20, y[i]) 的输出包含i,则从结果中排除i。换句话说,我想要一个像

一样工作的函数
setdiff(deleteat!(Vector(1:20),i) ,y[i])

但使用map

主要是我的问题是你是否可以访问map函数中的索引。

P.S,我知道怎么用comprehensions来做,我想知道是否可以用map来做。

领悟方式:

[setdiff(deleteat!(Vector(1:20), index), value) for (index,value) in enumerate(y)]

【问题讨论】:

    标签: julia map-function


    【解决方案1】:

    像这样?

    map(x -> setdiff(deleteat!(Vector(1:20), x[1]),x[2]), enumerate(y))
    

    你的例子给出了这个:

    [2,3,4,5,7,8,9,10,11,12,13,15,17,19,20]
    [1,3,5,6,7,8,9,10,11,13,16,17,18,20]
    ....
    [1,2,4,7,8,10,11,12,13,14,15,16,17,18]
    [1,2,3,5,6,8,11,12,13,14,15,16,17,19,20]

    【讨论】:

    • 您可以在 lambda 中使用解构来避免索引:map(((i,yi), ) -> setdiff(deleteat!(Vector(1:20), i), yi), enumerate(y))((i,yi), ) -> 有点难看,但必须将 (i,yi) 解析为元组参数。
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多