For obvious reasons, I have two numpy arrays with different sizes with an index, as well as xyz coordinates, and the rest just contain coordinates. (please ignore the first serial number, I cannot understand the formatting.) The second array does not have less. coordinates and I need the indices (atomID) of these coordinates from the first array.
Array1 (with index column):
serialNo. moleculeID atomID xyz
- 1 1 2 0 7.7590151 7.2925348 12.5933323
- 2 1 2 0 7.123642 6.1970949 11.5622416
- 3 1 6 0 6.944543 7.0390449 12.0713224
- 4 1 2 0 8.8900348 11.5477333 13.5633965
- 5 1 2 0 7.857268 12.8062735 13.4357052
- 6 1 6 0 8.2124357 12.1004238 14.0486889
Array2 (only coordinates):
xyz
- 7.7590151 7.2925348 12.5933323
- 7.123642 6.1970949 11.5622416
- 6.944543 7.0390449 12.0713224
- 8.8900348 11.5477333 13.5633965
In the array with the index column (atomID) the indices are indicated as 2, 2, 6, 2, 2 and 6. How can I get the indices for coordinates that are common to Array1 and Array2. I expect to return 2 2 6 2 to the list and then combine it with the second array. Any simple ideas?
Update:
Tried using the following code, but it doesn't seem to work.
import numpy as np a = np.array([[4, 2.2, 5], [2, -6.3, 0], [3, 3.6, 8], [5, -9.8, 50]]) b = np.array([[2.2, 5], [-6.3, 0], [3.6, 8]]) print a print b for i in range(len(b)): for j in range(len(a)): if a[j,1]==b[i,0]: x = np.insert(b, 0, a[i,0], axis=1)
which outputs the following:
not true not true not true not true not true not true not true not true not true [[ 3. 2.2 5. ] [ 3. -6.3 0. ] [ 3. 3.6 8. ]]
but expected:
[[ 4. 2.2 5. ] [ 2. -6.3 0. ] [ 3. 3.6 8. ]]