Skip to content

Instantly share code, notes, and snippets.

@ggggggggg
Last active August 29, 2015 14:08
Show Gist options
  • Save ggggggggg/64cbeea1f8adba19f26d to your computer and use it in GitHub Desktop.
Save ggggggggg/64cbeea1f8adba19f26d to your computer and use it in GitHub Desktop.
function mandel(z)
c = z
maxiter = 80
for n = 1:maxiter
if abs(z) > 2
return n-1
end
z = z^2 + c
end
return maxiter
end
def mandel(z):
maxiter = 80
c = z
for n in range(maxiter):
if abs(z) > 2:
return n
z = z*z + c
return maxiter
integer, intent(in) :: t
real(dp), intent(out) :: s1, s2
real(dp), allocatable, dimension(:, :) :: a, b, c, d, P, Q, X
real(dp), allocatable :: v(:), w(:)
integer :: n, i
n = 5
allocate(a(n, n), b(n, n), c(n, n), d(n, n))
allocate(P(4*n, n), Q(2*n, 2*n), X(2*n, 2*n))
allocate(v(t), w(t))
do i = 1, t
call randn(a)
call randn(b)
call randn(c)
call randn(d)
P(:n, :)=a; P(n+1:2*n, :)=b; P(2*n+1:3*n, :)=c; P(3*n+1:, :)=d
Q(:n, :n) = a; Q(n+1:, :n) = b
Q(:n, n+1: ) = c; Q(n+1:, n+1: ) = d
X = matmul(transpose(P), P)
X = matmul(X, X)
X = matmul(X, X)
v(i) = trace(X)
X = matmul(transpose(Q), Q)
X = matmul(X, X)
X = matmul(X, X)
w(i) = trace(X)
end do
s1 = std(v) / mean(v)
s2 = std(w) / mean(w)
end subroutine
def randmatstat(t):
n = 5
v = zeros(t)
w = zeros(t)
for i in range(1,t):
a = numpy.random.randn(n, n)
b = numpy.random.randn(n, n)
c = numpy.random.randn(n, n)
d = numpy.random.randn(n, n)
P = matrix(hstack((a, b, c, d)))
Q = matrix(vstack((hstack((a, b)), hstack((c, d)))))
v[i] = trace(matrix_power(transpose(P)*P, 4))
w[i] = trace(matrix_power(transpose(Q)*Q, 4))
return (std(v)/mean(v), std(w)/mean(w))
r = rand(10000000)
summarize(r) = mean(r), maximum(r), minimum(r)
function summarize_loop(r)
maxval = realmin(eltype(r))
minval = realmax(eltype(r))
s = zero(eltype(r))
for i = 1:length(r)
d = r[i]
s+=d
if d > maxval
maxval = d
elseif d < minval
minval = d
end
end
s/length(r), maxval, minval
end
function summarize_loop2(r)
maxval = realmin(eltype(r))
minval = realmax(eltype(r))
s = 0
for i = 1:length(r)
d = r[i]
s+=d
if d > maxval
maxval = d
elseif d < minval
minval = d
end
end
s/length(r), maxval, minval
end
@time for i=1:10 summarize(r) end
@time for i=1:10 summarize_loop(r) end
@time summarize_loop(r)
import numpy, time
r = numpy.random.rand(10000000)
def summarize(r):
return r.mean(), numpy.amax(r), numpy.amin(r)
def summarize_loop(r):
maxval = -numpy.inf
minval = numpy.info
s = 0.0
for i in range(len(r)):
d = r[i]
s+=d
if d > maxval:
maxval = d
elif d < minval:
minval = d
return s/length(r), maxval, minval
tstart = time.time()
meanval, maxval, minval = summarize_loop(r)
tend=time.time()
print(10*(tend-tstart))
tstart = time.time()
for i in range(10):
meanval, maxval, minval = summarize(r)
tend=time.time()
print(tend-tstart)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment