我有一个带有两个 UInt32 列的 DataFrame
x
。以下函数在第二列的子集中搜索第一列的值:
findfirst(==(x[y, 1]), x[1:(y - 1), 2])
y
是标量,例如10. 如果我正确理解 https://dataframes.juliadata.org/stable/lib/indexing,x[1:(y - 1), 2])
复制 DataFrame 的区域。我怎样才能让findfirst
在适当的位置搜索x
的那部分,即通过引用?
您可以使用
@view
:
findfirst(==(x[y, 1]), @view x[1:(y - 1), 2])
假设你有
df = DataFrame(rand(1:99,5,2), :auto);
而不是索引复制(如你的问题),而 @view
产生对数据的引用:
julia> df[1:3, 2]
3-element Vector{Int64}:
62
88
11
julia> @view df[1:3, 2]
3-element view(::Vector{Int64}, 1:3) with eltype Int64:
62
88
11
另请注意,如果您想要引用整个专栏,您可以执行
df[!, 2]
。查看下面的两个代码(一个给出参考,而另一个复制数据,从而复制分配的字节数)。
julia> @allocated df[!, 2]
0
julia> @allocated df[:, 2]
96