@@ -37,6 +37,10 @@ This internal function determines the new set of axes that are constructed upon
3737indexing with I.
3838"""
3939reaxis (A:: AxisArray , I:: Idx... ) = _reaxis (make_axes_match (axes (A), I), I)
40+ function reaxis (A:: AxisArray , I:: AbstractArray{Bool} )
41+ vecI = vec (I)
42+ _reaxis (make_axes_match (axes (A), (vecI,)), (vecI,))
43+ end
4044# Ensure the number of axes matches the number of indexing dimensions
4145@inline make_axes_match (axs, idxs) = _make_axes_match ((), axs, Base. index_ndims (idxs... ))
4246# Move the axes into newaxes, until we run out of both simultaneously
@@ -95,6 +99,12 @@ using Base.AbstractCartesianIndex
9599# Setindex is so much simpler. Just assign it to the data:
96100@propagate_inbounds Base. setindex! (A:: AxisArray , v, idxs:: Idx... ) = (A. data[idxs... ] = v)
97101
102+ # Logical indexing
103+ @propagate_inbounds function Base. getindex (A:: AxisArray , idx:: AbstractArray{Bool} )
104+ AxisArray (A. data[idx], reaxis (A, idx))
105+ end
106+ @propagate_inbounds Base. setindex! (A:: AxisArray , v, idx:: AbstractArray{Bool} ) = (A. data[idx] = v)
107+
98108# ## Fancier indexing capabilities provided only by AxisArrays ###
99109@propagate_inbounds Base. getindex (A:: AxisArray , idxs... ) = A[to_index (A,idxs... )... ]
100110@propagate_inbounds Base. setindex! (A:: AxisArray , v, idxs... ) = (A[to_index (A,idxs... )... ] = v)
0 commit comments