File: testMaxMin.py

package info (click to toggle)
rdkit 202503.1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 220,160 kB
  • sloc: cpp: 399,240; python: 77,453; ansic: 25,517; java: 8,173; javascript: 4,005; sql: 2,389; yacc: 1,565; lex: 1,263; cs: 1,081; makefile: 580; xml: 229; fortran: 183; sh: 105
file content (37 lines) | stat: -rw-r--r-- 756 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy

from rdkit import RDRandom
from rdkit.SimDivFilters import rdSimDivPickers as rdsimdiv

RDRandom.seed(23)

pkr = rdsimdiv.MaxMinPicker()

n = 1000
m = 80
dataPts = []
for i in range(n):
  pt = numpy.zeros(2, 'd')
  pt[0] = 10. * RDRandom.random()
  pt[1] = 10. * RDRandom.random()
  dataPts.append(pt)

# compute the distance matrix
distMat = numpy.zeros(n * (n - 1) / 2, 'd')
for i in range(n - 1):
  itab = n * i - ((i + 1) * (i + 2)) / 2
  pt1 = dataPts[i]
  for j in range(i + 1, n):
    id = itab + j
    pt2 = dataPts[j]
    diff = pt2 - pt1

    dist = numpy.sqrt(numpy.dot(diff, diff))
    distMat[id] = dist

  # now do the picking
res = pkr.Pick(distMat, n, m)

print("Results:")
for k in res:
  print(dataPts[k][0], dataPts[k][1])