[Numpy-discussion] Any help from Numpy community?

Ryan rnelsonchem at gmail.com
Thu Mar 14 09:05:17 EDT 2013


Birdada Simret <birdada85 <at> gmail.com> writes:

> 
> 
> Any help from Numpy community
> [[   0.          1.54        0.          0.          0.            1.08    
1.08      1.08  ]
> 
> [ 1.54        0.          1.08        1.08      1.08        0.          0.    
      0.   ]
>  [    0.       1.08         0.          0.           0.            0.        
  0.           0.   ]
>  [    0.       1.08         0.          0.           0.            0.        
 0.            0.    ]
> 
>  [   0.        1.08        0.           0.           0.            0.        
 0.            0.    ]
>  [ 1.08       0.           0.           0.           0.            0.        
 0.            0.     ]
> 
>  [ 1.08       0.           0.           0.           0.            0.        
 0.            0.     ]
>  [ 1.08       0.           0.           0.           0.            0.        
 0.            0.     ]]
> 
> 
> the above is the numpy array matrix. the numbers represents:
> C-C: 1.54 and C-H=1.08
> So I want to write this form as
> C of index i is connected to C of index j
> C of index i is connected to H of index j
> 
> 
> (C(i),C(j))  # key C(i) and value C(j)
> (C(i),H(j)) # key C(i) and value H(j) ; the key C(i) can be repeated to fulfil
as much as the values of H(j)
> To summarize,  the out put may look like:
> 
> C1 is connected to C2
> C1 is connected to H1
> C1 is connected to H3
> C2 is connected to H2   etc....
> 
> Any guide is greatly appreciated,
> thanks
> birda
> 
> 
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion <at> scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
> 

Birda,

I think this will get you some of the way there:

import numpy as np
x = ... # Here's your 2D atomic distance array
# Create an indexing array
index = np.arange( x.size ).reshape( x.shape )
# Find the non-zero indices 
items = index[ x != 0 ]
# You only need the first half because your array is symmetric
items = items[ : items.size/2]
rows = items / x.shape[0]
cols = items % x.shape[0]
print 'Rows:   ', rows
print 'Columns:', cols
print 'Atomic Distances:', x[rows, cols]

Hope it helps.

Ryan




More information about the NumPy-Discussion mailing list