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
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion <at> scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
Whoops. That doesn't quite work. You shouldn't drop half the items array like that. This will work better (maybe ?): import numpy as np x = ... # Here's your 2D atomic distance array index = np.arange( x.size ).reshape( x.shape ) items = index[ x != 0 ] rows = items / x.shape[0] cols = items % x.shape[0] # This index mask should take better advantage of the array symmetry mask = rows < cols print 'Rows: ', rows[mask] print 'Columns:', cols[mask] print 'Atomic Distances:', x[rows[mask], cols[mask]] Ryan