Original signature: -rw-r--r-- 1 wirawan0 wirawan0 1380 2010-04-27 15:55 symmetrix-array-index.py b873ece4610483b3cd5290c6ddbc7426 symmetrix-array-index.pymaster
parent
7017fdc6af
commit
961a802326
1 changed files with 73 additions and 0 deletions
@ -0,0 +1,73 @@ |
||||
# 20100427 |
||||
|
||||
""" |
||||
Symmetric array layout (lower diagonal, Fortran column-major ordering): |
||||
|
||||
|
||||
----> j |
||||
| (1,1) |
||||
i | (2,1) (2,2) |
||||
v (3,1) (3,2) (3,3) |
||||
: : : |
||||
(N,1) (N,2) (N,3) ... (N,N) |
||||
|
||||
In linear form: |
||||
|
||||
1 |
||||
2 N+1 |
||||
3 N+2 2N |
||||
: : : |
||||
N N+N-1 |
||||
|
||||
|
||||
|
||||
iskip = i - j + 1 (easy) |
||||
|
||||
jskip determination |
||||
i jskip jskip |
||||
(cumulant) (total) |
||||
1 0 |
||||
2 N |
||||
3 N-1 |
||||
4 N-2 |
||||
... |
||||
j N-(j-2) (j-1)N - (j-2)(j-1)/2 |
||||
... |
||||
|
||||
|
||||
Note: |
||||
|
||||
{m} |
||||
SUM a = 1 + 2 + ... + m = m(m+1)/2 |
||||
{a=1} |
||||
""" |
||||
|
||||
import numpy |
||||
|
||||
def test_jskip_1(N, M): |
||||
jskip1 = 0 |
||||
jskip2 = 0 |
||||
for m in xrange(1, M+1): |
||||
if m == 1: |
||||
cum = 0 |
||||
else: |
||||
cum = N - (m-2) |
||||
jskip2 = (m-1)*N - (m-2)*(m-1)/2 |
||||
jskip1 += cum |
||||
print "%5d %5d %5d %5d" % (m, cum, jskip1, jskip2) |
||||
|
||||
|
||||
def copy_over_array(N, arr_L): |
||||
rslt = numpy.zeros((N,N)) |
||||
for i in xrange(N): |
||||
for j in xrange(N): |
||||
if j > i: continue |
||||
ii = i+1 # Fortranize it |
||||
jj = j+1 # Fortranize it |
||||
jskip = (jj-1)*N - (jj-2)*(jj-1)/2 |
||||
iskip = ii - jj + 1 |
||||
ldiag_index = iskip + jskip - 1 # -1 for C-izing again |
||||
# indices printed in Fortran 1-based indices |
||||
print "%5d %5d %5d %5d %5d" % (ii,jj,iskip,jskip,ldiag_index+1) |
||||
rslt[i,j] = arr_L[ldiag_index] |
||||
return rslt |
Loading…
Reference in new issue