智能索引,用于匹配Julia中的值

时间:2015-09-15 05:49:43

标签: indexing julia

假设我有以下内容:

# valuesToFind: n x 1 vector
# allValues: m x n matrix, in which every column allValues[:,i]
# contains among it's components exactly 1 instance of the
# corresponding value valuesToFind[i] at some row position

我正在尝试确定valuesToFind中每个值发生匹配的位置(行索引),目前,我通过以下循环实现它:

idx=Array(Int16, length(valuesToFind))
for (i, v) in enumerate(valuesToFind)
    idx[i] = findfirst(articleIDs[:,i], v)
end

是否可以在单个语句中没有循环的情况下执行此操作?

2 个答案:

答案 0 :(得分:2)

您在寻找:

[findfirst(allValues[:,i], v) for (i,v) in enumerate(valuesToFind)]


我不是100%确信这是更清晰的(在代码可读性方面)然后是一个简单的循环,但如果那就是你所追求的那样,它将在一行中完成工作。

答案 1 :(得分:1)

尝试:

map(x->ind2sub(allValues,x)[1],findin(allValues,valuesToFind))

这是获取列中每个值的行号的单行解决方案。请注意,它使用问题中列出的假设(每列中的唯一值)。它还在矩阵的第一列布局上使用了一些假设。可以使用sort返回的第一个索引ind2sub删除布局假设。