Python: Compare Elements of two arrays

Varlor

I want to compare elements of two numpy arrays and delete the elements of one of those arrays if the eucledean distance between the coordinates is smaller than 1 and the time is the same. data_CD4 and data_CD8 are the arrays. The elements of the arrays are lists with 3D Coordinates and the time as 4th element (numpy.array([[x,y,z,time],[x,y,z,time].....]). Co is the Cutoff, here 1.

for i in data_CD8:
        for m in data_CD4:
            if distance.euclidean(tuple(i[:3]),tuple(m[:3])) < co and i[3]==m[3] :
                data_CD8=np.delete(data_CD8, i, 0)

Is there a faster approach to do that? The first array has 5000 elements, the second 2000, so it tooks too much time.

Divakar

Here's a vectorized approach using Scipy's cdist -

from scipy.spatial import distance

# Get eucliden distances between first three cols off data_CD8 and data_CD4
dists = distance.cdist(data_CD8[:,:3], data_CD4[:,:3])

# Get mask of those distances that are within co distance. This sets up the 
# first condition requirement as posted in the loopy version of original code.
mask1 = dists < co

# Take the third column off the two input arrays that represent the time values.
# Get the equality between all time values off data_CD8 against all time values
# off data_CD4. This sets up the second conditional requirement.
# We are adding a new axis with None, so that NumPY broadcasting
# would let us do these comparisons in a vectorized manner.
mask2 = data_CD8[:,3,None] == data_CD4[:,3]

# Combine those two masks and look for any match correponding to any 
# element off data_CD4. Since the masks are setup such that second axis
# represents data_CD4, we need numpy.any along axis=1 on the combined mask.
# A final inversion of mask is needed as we are deleting the ones that 
# satisfy these requirements.
mask3 = ~((mask1 & mask2).any(1))

# Finally, using boolean indexing to select the valid rows off data_CD8
out = data_CD8[mask3]

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Compare two json arrays and return common elements java

How to compare elements of two arrays

Compare elements in two 1D arrays of different size, with tolerance

JS compare the order of SOME elements in two different arrays

Compare two arrays with different size - python numpy

Compare elements in two arrays and return True when one value is greater than the other using python

Compare elements in two lists in python

Python how to compare the elements in 2 arrays by row

Compare two arrays with forEach and add different html elements on condition

Java: how to compare two int[] arrays for non duplicate elements?

Compare elements of two arrays of Object

Compare two arrays and print number of matching elements

How to compare two arrays to see how many same elements they have?

compare an array with two other arrays in python

Compare two arrays of different structures and find elements in PHP

Compare two arrays and find the index of uncommon elements in SWIFT 3

Scala: Compare elements at same position in two arrays

How to compare two arrays and find the indices where the elements differ?

How to compare two arrays and eliminate duplicates python

Compare elements of one array to other two arrays, swift

Compare two unequal size numpy arrays and fill the exclusion elements with nan

How can I compare strings as unordered elements of two arrays?

How to extract corresponding elements of two arrays in python

Compare elements of two arrays in javascript

How to compare two elements inside nested arrays using mongodb?

How to compare two arrays of Json by each of their elements Id?

How to compare two byte arrays in Python

How to compare two lists and remove elements in python

How to compare two arrays containing different data type elements?