下面是一个使用^{}-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]