Re: [Numpy-discussion] Any help from Numpy community?

2013-03-14 Thread Birdada Simret
Hi Ryan,Thank you very much indeed, I'm not sure if I well understood your
code, let say, for the example array matrix given represents  H3C-CH3
connection(bonding).
the result from your code is:
Rows:[0 0 0 0 1 1 1]  # is these for C indices?
Columns: [1 2 3 4 5 6 7]   # is these for H indices? but it shouldn't be 6
H's?
Atomic Distances: [ 1.  1.  1.  1.  1.  1.  1.] # ofcourse this is the
number of connections or bonds.

In fact, if I write in the form of dictionary: row indices as keys and
column indices as values,
{0:1, 0:2, 0:3, 0:4, 1:5, 1:6, 1:7}, So, does it mean C[0] is connected to
H[1], C[0] is connected to H[2] , H[1],,C[1] is connected to H[7]?  But
I have only 6 H's and two C's  in this example (H3C-CH3)

I have tried some thing like: but still no luck ;(
import numpy as np
from collections import defaultdict
dict = defaultdict(list)
x=2d numpy array
I = x.shape[0]
J = x.shape[1]
d={}
for i in xrange(0, I, 1):
  for j in xrange(0, J, 1):
 if x[i,j]  0:
dict[i].append(j)
# the result is:
dict:  {0: [1, 2, 3, 4], 1: [0, 5, 6, 7], 2: [0], 3: [0], 4: [0], 5: [1],
6: [1], 7: [1]})
keys: [0, 1, 2, 3, 4, 5, 6, 7]
values:  [[1, 2, 3, 4], [0, 5, 6, 7], [0], [0], [0], [1], [1], [1]]

#The H indices can be found by
 H_rows = np.nonzero(x.sum(axis=1)== 1)
result=H_rows : [2, 3, 4, 5, 6, 7]  # six H's
I am trying to connect this indices with the dict result but I am confused!
So, now I want to produce a dictionary or what ever to produce results as:
 H[2] is connected to C[?]

  H[3] is connected to C[?]

  H[4] is connected to C[?], .
Thanks for any help
   .


On Thu, Mar 14, 2013 at 2:26 PM, Ryan rnelsonc...@gmail.com wrote:


 
  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


 ___
 NumPy-Discussion mailing list
 NumPy-Discussion@scipy.org
 http://mail.scipy.org/mailman/listinfo/numpy-discussion

___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Any help from Numpy community?

2013-03-14 Thread Birdada Simret
Oh, thanks alot. can the  atoms = np.array(['C1', 'C2', 'H3', 'H4', 'H5',
'H6', 'H7', 'H8']) able to make  general? I mean, if I have a big
molecule, it seems difficult to label each time. Ofcourse I'm new to
python(even for programing) and I didn't had any knowhow about pandas, but
i will try it. any ways, it is great help, many thanks Ryan

Birda


On Thu, Mar 14, 2013 at 5:03 PM, Ryan rnelsonc...@gmail.com wrote:

 Birdada Simret birdada85 at gmail.com writes:

 
 
 
  Hi Ryan,Thank you very much indeed, I'm not sure if I well understood
 your
 code, let say, for the example array matrix given represents  H3C-CH3
 connection(bonding).
  the result from your code is:
  Rows:[0 0 0 0 1 1 1]  # is these for C indices?
  Columns: [1 2 3 4 5 6 7]   # is these for H indices? but it shouldn't be
 6 H's?
  Atomic Distances: [ 1.  1.  1.  1.  1.  1.  1.] # ofcourse this is the
 number
 of connections or bonds.
 
  In fact, if I write in the form of dictionary: row indices as keys and
 column
 indices as values,
  {0:1, 0:2, 0:3, 0:4, 1:5, 1:6, 1:7}, So, does it mean C[0] is connected
 to
 H[1], C[0] is connected to H[2] , H[1],,C[1] is connected to H[7]?
  But I
 have only 6 H's and two C's  in this example (H3C-CH3)
 
  I have tried some thing like: but still no luck ;(
  import numpy as np
  from collections import defaultdict
  dict = defaultdict(list)
  x=2d numpy array
 
  I = x.shape[0]
  J = x.shape[1]
  d={}
  for i in xrange(0, I, 1):
for j in xrange(0, J, 1):
   if x[i,j]  0:
  dict[i].append(j)
  # the result is:
  dict:  {0: [1, 2, 3, 4], 1: [0, 5, 6, 7], 2: [0], 3: [0], 4: [0], 5:
 [1], 6:
 [1], 7: [1]})
  keys: [0, 1, 2, 3, 4, 5, 6, 7]
  values:  [[1, 2, 3, 4], [0, 5, 6, 7], [0], [0], [0], [1], [1], [1]]
 
 
  #The H indices can be found by
   H_rows = np.nonzero(x.sum(axis=1)== 1)
  result=H_rows : [2, 3, 4, 5, 6, 7]  # six H's
  I am trying to connect this indices with the dict result but I am
 confused!
  So, now I want to produce a dictionary or what ever to produce results
 as:
  H[2] is connected to C[?]
 

 H[3] is connected to C[?]
 

 H[4] is connected to C[?], .
  Thanks for any help
 .
 
 
  On Thu, Mar 14, 2013 at 2:26 PM, Ryan rnelsonchem at gmail.com
 wrote:
 
 

 Birda,

 I don't know how your getting those values from my code. Here's a slightly
 modified and fully self-contained version that includes your bonding
 matrix:

 import numpy as np
 x = np.array(
 [[ 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. ]]
  )
 atoms = np.array(['C1', 'C2', 'H3', 'H4', 'H5', 'H6', 'H7', 'H8'])
 index = np.arange( x.size ).reshape( x.shape )
 items = index[ x != 0 ]
 rows = items / x.shape[0]
 cols = items % x.shape[0]
 mask = rows  cols
 print 'Rows:   ', rows[mask]
 print 'Columns:', cols[mask]
 print 'Bond Atom 1: ', atoms[ rows[mask] ]
 print 'Bond Atom 2: ', atoms[ cols[mask] ]
 print 'Atomic Distances:', x[rows[mask], cols[mask]]

 If I copy that into a file and run it, I get the following output:

 Rows:[0 0 0 0 1 1 1]
 Columns: [1 5 6 7 2 3 4]
 Bond Atom 1:  ['C1' 'C1' 'C1' 'C1' 'C2' 'C2' 'C2']
 Bond Atom 2:  ['C2' 'H6' 'H7' 'H8' 'H3' 'H4' 'H5']
 Atomic Distances: [ 1.54  1.08  1.08  1.08  1.08  1.08  1.08]

 Honestly, I did not think about your code all that much. Too many 'for'
 loops
 for my taste. My code has quite a bit of fancy indexing, which I could
 imagine
 is also quite confusing.

 If you really want a dictionary type of interface that still let's you use
 Numpy
 magic, I would take a look at Pandas (http://pandas.pydata.org/)

 Ryan


 ___
 NumPy-Discussion mailing list
 NumPy-Discussion@scipy.org
 http://mail.scipy.org/mailman/listinfo/numpy-discussion

___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


[Numpy-discussion] Any help from Numpy community?

2013-03-13 Thread Birdada Simret
*

Any help from Numpy community
[[   0.  1.540.  0.  0.1.08
1.08  1.08  ]
[ 1.540.  1.081.08  1.080.  0.
  0.   ]
 [0.   1.08 0.  0.   0.0.
0.   0.   ]
 [0.   1.08 0.  0.   0.0.
   0.0.]
 [   0.1.080.   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@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion