Skip to content

Commit 47849e7

Browse files
vecvec at mat arr means
1 parent 46a79c8 commit 47849e7

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/RecursiveArrayTools.jl

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ __precompile__()
22

33
module RecursiveArrayTools
44

5+
import Base: mean
6+
57
function recursivecopy!{T<:Number,N}(b::Array{T,N},a::Array{T,N})
68
@inbounds copy!(b,a)
79
end
@@ -54,7 +56,29 @@ module RecursiveArrayTools
5456

5557
recursive_one(a) = recursive_one(a[1])
5658
recursive_one{T<:Number}(a::T) = one(a)
59+
60+
function mean{T<:AbstractArray}(vecvec::Vector{T})
61+
out = zeros(vecvec[1])
62+
for i in eachindex(vecvec)
63+
out+= vecvec[i]
64+
end
65+
out/length(vecvec)
66+
end
67+
68+
function mean{T<:AbstractArray}(matarr::Matrix{T},region=0)
69+
if region == 0
70+
return mean(vec(matarr))
71+
elseif region == 1
72+
out = [zeros(matarr[1,i]) for i in 1:size(matarr,2)]
73+
for j in 1:size(matarr,2), i in 1:size(matarr,1)
74+
out[j] += matarr[i,j]
75+
end
76+
return out/size(matarr,1)
77+
elseif region == 2
78+
return mean(matarr',1)
79+
end
80+
end
5781

58-
export recursivecopy!, vecvecapply, copyat_or_push!, vecvec_to_mat, recursive_one
82+
export recursivecopy!, vecvecapply, copyat_or_push!, vecvec_to_mat, recursive_one,mean
5983

6084
end # module

test/runtests.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,20 @@ t = collect(linspace(0,10,200))
1919
randomized = [(sol(t[i]) + .01randn(2)) for i in 1:length(t)]
2020
data = vecvec_to_mat(randomized)
2121
@test typeof(data) <: Matrix{Float64}
22+
23+
## Test means
24+
A = [[1 2; 3 4],[1 3;4 6],[5 6;7 8]]
25+
@test mean(A) [2.33333333 3.666666666
26+
4.6666666666 6.0]
27+
B = Matrix{Matrix{Int64}}(2,3)
28+
B[1,:] = [[1 2; 3 4],[1 3;4 6],[5 6;7 8]]
29+
B[2,:] = [[1 2; 3 4],[1 5;4 3],[5 8;2 1]]
30+
31+
ans = [[1 2; 3 4],[1 4; 4 4.5],[5 7; 4.5 4.5]]
32+
@test mean(B,1)[1] ans[1]
33+
@test mean(B,1)[2] ans[2]
34+
@test mean(B,1)[3] ans[3]
35+
36+
ans = [[2.333333333333 4.666666666666; 3.6666666666666 6.0], [2.3333333 3.0; 5.0 2.6666666]]
37+
@test mean(B,2)[1] ans[1]
38+
@test mean(B,2)[2] ans[2]

0 commit comments

Comments
 (0)