Heh... neither did I... I gave you code for column sums! Should be easy enough to convert...
On Tue, Jul 28, 2015 at 12:05 PM, Stefan Karpinski <ste...@karpinski.org> wrote: > Oh, didn't catch that you wanted row sums, but yeah, same basic idea. > > On Tue, Jul 28, 2015 at 12:03 PM, Tom Breloff <t...@breloff.com> wrote: > >> I would just write the loop explicitly: >> >> >> julia> function meanpositives(mat::Matrix) >> nc = size(mat,2) >> sums = zeros(nc) >> counts = zeros(nc) >> for c in 1:nc >> for r in 1:size(mat,1) >> v = mat[r,c] >> if v > 0 >> sums[c] += v >> counts[c] += 1.0 >> end >> end >> end >> Float64[(counts[i]>0 ? sums[i]/counts[i] : 0.0) for i in 1:nc] >> end >> meanpositives (generic function with 1 method) >> >> julia> x >> 3x3 Array{Float64,2}: >> 10.0 5.0 0.0 >> 5.0 0.0 0.0 >> 0.0 0.0 0.0 >> >> julia> meanpositives(x) >> 3-element Array{Float64,1}: >> 7.5 >> 5.0 >> 0.0 >> >> >> On Tue, Jul 28, 2015 at 12:01 PM, Stefan Karpinski <ste...@karpinski.org> >> wrote: >> >>> You mean quicker as in faster or as in easier? Using indexing is >>> probably easiest but not fastest: >>> >>> julia> M = randn(5,5) >>> 5x5 Array{Float64,2}: >>> -1.51134 1.2331 -0.186083 0.412282 -1.13114 >>> -0.0411132 0.124684 0.377426 0.622427 -0.278162 >>> 0.788182 -0.834092 1.09506 1.45196 -0.620717 >>> 1.45856 -0.889277 -0.768049 -0.95953 -0.340098 >>> 1.69666 0.695566 0.706905 0.63089 0.958474 >>> >>> julia> mean(M[M .> 0]) >>> 0.8751552351448673 >>> >>> >>> If you want the fastest, loop through the matrix and keep totals and >>> counts: >>> >>> julia> function meanpos(a) >>> t = zero(eltype(a)) >>> c = 0 >>> for x in a >>> x > 0 || continue >>> t += x >>> c += 1 >>> end >>> return t/c >>> end >>> meanpos (generic function with 1 method) >>> >>> julia> meanpos(M) >>> 0.8751552351448673 >>> >>> >>> This should be fairly efficient for any non-sparse collection. >>> >>> >>> On Tue, Jul 28, 2015 at 11:50 AM, Jude <judithmdela...@gmail.com> wrote: >>> >>>> Hi! >>>> >>>> Probably a quite basic question but was wondering if someone knows a quick >>>> way to get the average of theh positive elements of a matrix, eg, If I have >>>> an m*n matrix and want to get the average for each m so have m*1 but only >>>> want to work with non-zero elements and ignore the zero elements and >>>> negative elements >>>> >>>> I guess I could using indexing and pull out the indexes corresponding >>>> to the positive elements but just wondering if anyone knew quicker ways! >>>> >>>> Thanks! >>>> >>> >>> >> >