Skip to content

Commit c56dc40

Browse files
authored
Merge pull request #71 from JuliaArrays/gs/map
map and map!
2 parents 4a7742b + b8d3ed6 commit c56dc40

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

src/combine.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ function equalvalued(X::NTuple)
99
return allequal
1010
end #equalvalued
1111

12-
sizes{T<:AxisArray}(As::T...) = tuple(zip(map(size, As)...)...)
12+
sizes{T<:AxisArray}(As::T...) = tuple(zip(map(a -> map(length, indices(a)), As)...)...)
1313
matchingdims{N,T<:AxisArray}(As::NTuple{N,T}) = all(equalvalued, sizes(As...))
1414
matchingdimsexcept{N,T<:AxisArray}(As::NTuple{N,T}, n::Int) = all(equalvalued, sizes(As[[1:n-1; n+1:end]]...))
1515

src/core.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,23 @@ Base.ctranspose{T}(A::AxisArray{T,2}) = AxisArray(ctranspose(A.data), A.axes[2],
290290
Base.transpose{T}(A::AxisArray{T,1}) = AxisArray(transpose(A.data), Axis{:transpose}(Base.OneTo(1)), A.axes[1])
291291
Base.ctranspose{T}(A::AxisArray{T,1}) = AxisArray(ctranspose(A.data), Axis{:transpose}(Base.OneTo(1)), A.axes[1])
292292

293+
Base.map!{F}(f::F, A::AxisArray) = (map!(f, A.data); A)
294+
Base.map(f, A::AxisArray) = AxisArray(map(f, A.data), A.axes...)
295+
296+
function Base.map!{F,T,N,D,Ax<:Tuple{Vararg{Axis}}}(f::F, dest::AxisArray{T,N,D,Ax},
297+
As::AxisArray{T,N,D,Ax}...)
298+
matchingdims((dest, As...)) || error("All axes must be identically-valued")
299+
data = map(a -> a.data, As)
300+
map!(f, dest.data, data...)
301+
return dest
302+
end
303+
304+
function Base.map{T,N,D,Ax<:Tuple{Vararg{Axis}}}(f, As::AxisArray{T,N,D,Ax}...)
305+
matchingdims(As) || error("All axes must be identically-valued")
306+
data = map(a -> a.data, As)
307+
return AxisArray(map(f, data...), As[1].axes...)
308+
end
309+
293310
permutation(to::Union{AbstractVector{Int},Tuple{Int,Vararg{Int}}}, from::Symbols) = to
294311

295312
"""

test/core.jl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,26 @@ A[0] = 12
202202
A = AxisArray(OffsetArrays.OffsetArray(rand(4,5), -1:2, 5:9), :x, :y)
203203
@test indices(A) == (-1:2, 5:9)
204204
@test linearindices(A) == 1:20
205+
206+
@test AxisArrays.matchingdims((A, A))
207+
208+
f1(x) = x < 0
209+
A2 = map(f1, A)
210+
@test isa(A2, AxisArray)
211+
@test A2.axes == A.axes
212+
@test A2.data == map(f1, A.data)
213+
214+
map!(~, A2)
215+
@test isa(A2, AxisArray)
216+
@test A2.axes == A.axes
217+
@test A2.data == ~map(f1, A).data
218+
219+
A2 = map(+, A, A)
220+
@test isa(A2, AxisArray)
221+
@test A2.axes == A.axes
222+
@test A2.data == A.data .+ A.data
223+
224+
map!(*, A2, A, A)
225+
@test isa(A2, AxisArray)
226+
@test A2.axes == A.axes
227+
@test A2.data == A.data .* A.data

0 commit comments

Comments
 (0)