Indexing Julia中匹配值的智能索引
假设我有以下几点:Indexing Julia中匹配值的智能索引,indexing,julia,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中的每个值确定此匹配发生
# 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
是否可以在一条语句中不使用循环执行此操作?您正在寻找:
[findfirst(allValues[:,i], v) for (i,v) in enumerate(valuesToFind)]
?我不是100%相信这比简单的循环更清晰(在代码可读性方面),但如果你想这样做的话,它可以在一行中完成工作。试试:
map(x->ind2sub(allValues,x)[1],findin(allValues,valuesToFind))
这是一个单行解决方案,用于获取列中每个值的行号。请注意,它使用问题中列出的假设(每列中的唯一值)。它还对矩阵的列优先布局使用了一些假设。布局假设可以通过对ind2sub
返回的第一个索引进行排序来删除