假设我有以下内容:
# 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
是否可以在单个语句中没有循环的情况下执行此操作?
答案 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
删除布局假设。